Django 模板层
模板传值
传函数名的时候 会自动加括号调用函数 将函数的返回值展示在html页面上
django模板语法不支持函数或对象传参
django模板语法在获取容器类型内部元素的值的时候 统一只采用 句点符(.),就是点取值
过滤器
过滤器类似于python的内置函数,用来把视图传入的变量值加以修饰后再显示, 具体语法如下
{{ a|过滤器名字:b }}
标签
标签是为了在模板中完成一些特殊功能,语法为{% 标签名 %},一些标签还需要搭 配结束标签 {% endtag %}
#1、遍历每一个元素:
{% for person in person_list %}
<p>{{ person.name }}</p>
{% endfor %}
#2、可以利用{% for obj in list reversed %}反向循环。
#3、遍历一个字典:
{% for key,val in dic.items %}
<p>{{ key }}:{{ val }}</p>
{% endfor %}
#4、循环序号可以通过{{ forloop }}显示
forloop.counter 当前循环的索引值(从1开始)
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是第一次循环则返回True,否则返回False
forloop.last 当前循环是最后一次循环则返回True,否则返回False
forloop.parentloop 本层循环的外层循环
#5、for标签可以带有一个可选的{% empty %} 从句,在变量person_list为空或者没有被找到时,则执行empty子
句
{% for person in person_list %}
<p>{{ person.name }}</p>
{% empty %}
<p>sorry,no person here</p>
{% endfor %}
自定义过滤器,标签
第一步:
在app文件下创建一个templatetags(必须是这个文件名)
第二步:
在文件加下面创建一个任意名字的py文件
第三步:
在py文件中
导入模块: from django.template import library
register = library() -> register整个名字也是固定的
第四步:
开始自定义过滤器
@register.filter(name="过滤器名字")
def foo(a,b) -> 必须两个参数,名字随便取
return a+b
开始自定义标签
@register.simple_tag(name="标签名")
def foo(a,b,c,d) -> 随便几个参数
return f"{a}/{b}/{c}/{d}"
模板的继承
事先在html文件的代码中,也就是html模板中通过block划定区域
{% block 区域名字 %}
...
{% endblock %}
子模版中的使用方式
{% extends 'html文件名字' %} // 就相当于导包
{% block 区域名字 %}
... -> 在这里面写代码
{% endblock %}
一个页面上 block块越多 页面的扩展性越高
通常情况下 都应该有三片区域
# css
{% block css %}
{% endblock %}
# 内容
{% block content %}
{% endblock %}
#
{% block js %}
{% endblock %}
子板中还可以通过{{ block.super }}
来继续使用母版的内容
模板的导入
当你写了一个特别好看的form表单 你想再多个页面上都使用这个form表单
你就可以将你写的form表单当作模块的形式导入 导入过来之后 就可以直接展示
{% include 'good_page.html' %}