- 一:标签是对模板上下文控制输出,它是以{% tag %}表示的,其中tag是标签的名称,Django内置了许多内置标签,内置标签可以在Django源码(\django\template\defaulttags.py)中找到定义过程,下面我们列举场景的内置标签:
- {% for %} 遍历输出上下文的内容
- {% if %} 对上下文进行条件判断
- {% crsf_token %} 生成crsf_token标签,用于防护跨站请求伪造攻击
- {% url %} 引用路由配置的地址,生成响应的路由地址
- {% with %} 将上下文名 重新命名
- {% load %} 加载导入Django的标签库
- {% static %} 读取静态资源的文件内容
- {% extends xxx %} 模板继承
- {% block xxx %} 重新父类模板的代码
#{% if %},{% for %}
{# 注意点:标签中使用变量不需要加双括号 #}
{% if num >= 100 %}
{{ num }}
{% elif num < 100 %}
<h2>小于100</h2>
{% endif %}
#{% crsf_token %} 生成crsf_token标签,用于防护跨站请求伪造攻击
前文中,提到过当我们提交form表单的时候,会报403,解决方法是注释setting中的中间件,这是躲避安全的措施,不可取。
用于生成csrf_token的标签,用于防治跨站攻击验证,其实,这里是会生成一个input标签,和其他表单标签一起提交给后台的。
<form action="/login/" method="post">
<input type="text" name="username">
<input type="password" name="pwd">
<input type="submit" value="submit">
{% csrf_token %}
</form>
此时我们打开login页面,F12查看--可以看到请求参数中有一个csrf_token参数,传给后台
csrfmiddlewaretoken: ZNLDhI8ziwmaERYovVSasJkc86BhMggjidLSDelyRby9jNBUHUG5Hf2TbZTRBzGB
#{% with %}:用更简单的变量名替代复杂的变量名
{% with total=fhjsaldfhjsdfhlasdfhljsdal %} {{ total }} {% endwith %}
#在for标签模板中,模板还提供了一些特殊的变量来获取for标签的循环信息
forloop.counter: 表示循环的次数。这个属性的值从 1 开始,因此第一次循环时,forloop.counter 等于 1 。
forloop.counter0: forloop.counter0 与 forloop.counter 类似,不过是从零开始的。第一次循环时,其值为 0 。
forloop.revcounter:forloop.revcounter的值是一个整数,表示循环中剩余的元素数量。第一次循环时, forloop.revcounter 的值是序列中要遍历的元素总数。最后一次循环时, forloop.revcounter的值为 1 。
forloop.revcounter0:forloop.revcounter0 与 forloop.revcounter类似,不过索引是基于零的。第一次循环时, forloop.revcounter0的值是序列中元素数量减去一。最后一次循环时, forloop.revcounter0 的值为 0 。
forloop.first:forloop.first 是个布尔值,第一次循环时为 True 。需要特殊处理第一个元素时很方便
forloop.last:forloop.last是个布尔值,最后一次循环时为True 。经常用它在一组链接之间放置管道符号:
forloop.parentloop:在嵌套的循环中, forloop.parentloop引用父级循环的 forloop 对象
L= [1,22,333,4444,55555]
{% for i in L %}
{% if forloop.counter == 1 %}
<span>这是第一次循环</span>
<br>
{% elif forloop.last %}
<span>这是最后一次循环</span>
<br>
{% else %}
<span>本次循环次数为:{{ forloop.counter }},列表元素值为:{{ i }}</span>
<br>
{% endif %}
{% endfor %}
- 二:过滤器主要对上下文进行操作,如替换、反转等,基础语法 {{obj|filter:param}}
- 单个上下文,支持多个过滤器同时使用,{{obj|filter1| fitter2}}
- 过滤器可以传入参数,但是最多一个,带参数的过滤器与参数使用冒号隔开,并且两者之间不能留空格
- Django内置过滤器可以在源码(\django\template\defaultfilters.py)里找到具体的定义。
常用过滤器:
# 1 add : 给变量加上相应的值
# 2 addslashes : 给变量中的引号前加上斜线
# 3 capfirst : 首字母大写
# 4 cut : 从字符串中移除指定的字符
# 5 date : 格式化日期字符串
# 6 default : 如果值是False,就替换成设置的默认值,否则就是用本来的值
# 7 default_if_none: 如果值是None,就替换成设置的默认值,否则就使用本来的值
重点:safe--开启HTML转义、数据含有html标签,自动转化成相应的网页效果
{{ html|safe }}
{% autoescape off %}
{{ html }}
{% endautoescape %}