20 模版
模版的功能:
产生html,控制页面上展示的内容。不仅仅是一个html文件
包含两部分内容:
1、静态内容:css,js,html
2、动态内容:通过模版语言动态产生一些网页内容
模版变量:
模版变量由数字、字母、下划线和点组成,不能以下划线开头。使用模版变量:{{ 变量名 }}
如果变量中有点,点前面的可能是一个字典、列表或者对象:
如{{ book.btitle }}解析顺序:
1、先将book当作一个字典,btitle当成一个键名来解析
2、将book当作一个对象,btitle当一个属性来解析
3、将book当作一个对象,btitle当成一个方法
如果还找不到,将使用一个空字符串填充变量名
另外一种:{{ book.0 }}:
1、将book当一个字典,0为键名
2、将book当一个列表,0为下标:book[0]
如果匹配不是,传空字符串
模版标签:
{% 代码段 %}
{% for x in list %}
{% endfor %}
{% empty %} :列表不为空时执行。。
{% forloop.counter %} 可以获取for循环的次数,从1开始计数:
<ul> {% for book in books %} <li>{% forloop.counter %}--{% book.btitle %}</li> </ul>
{% if 条件 %}
{% elif 条件 %}
{% else %}
{% endif %}
关系比较操作符:> < >= <= == !=
注意⚠️:进行比较操作时,比较操作符两边必须有空格
逻辑运算符:not and or
过滤器
用于对模版变量进行操作
比如date就是一个过滤器,用于改变日期的显示格式
格式:模版变量 |过滤器:参数
例:{{ book.bpub | date:'Y年-m月-d日' }}
default也是一个过滤器:如果value为false,则使用给出的默认值,否则使用该value
{{ value |default:'something'}} :如果value为空字符串,则输出“something”
自定义过滤器:
在Django项目下新建一个python包:templatetags 【一个字母都不能错】
在其下可以新建一个xx.Py文件,然后自定义过滤器【python函数】
注意:自定义过滤器,最少有一个参数(使用时不用传参,|前面的就是参数),最多有两个参数,使用时需要传一个参数
from django.tempalte import Library xxx = Library() @xxx.filter def mod(num): '''判断num是否为偶数''' return num%2 == 0
使用过滤器:
{% load xx%} #导入自定义的过滤器,就是templatetags下的python文件名
{% for book in books %}
{% if book.id|mod %} # 竖线前面的‘id’会作为参数传递给mod,如果有两个参数,则需要在后门传参:{% if book.id|mod:参数 %}
......
{% endif %}
{% endfor %}
更多过滤器参见Django手册
模版注释
单行注释:{# ... #}
多行注释:
{% comment %}
...
{% endcomment %}
模版继承
创建一个模版文件作为父模版:例如叫:base.html,此文件里面有导航条和版权信息,其它模版文件都继承base.html【都包含导航条和版权信息】
在子模板中,删除全部内容,加上这一句:
{% extends 'booktest/base.html' %}
子模版就继承了所有base.html中的内容。
注意⚠️:子模板中的内容要全部删掉。那么除了版权信息和导航条之外的其它内容怎么办?
答:在父模版中预留位置,叫做‘预留块’,子模版可以重写预留块中的内容
{% block 块名 %}
...中间可以写内容,也可以不写,子模版可以对块重写
{% endblock 块名%}
子模版如何重写:
{% block 块名%}
...重写内容
{% endblock 块名 %}
ps: 获取父模版中块的内容:
{% block 块名%}
这是此块中原来的内容: {{ block.super }}
<h1>这是重写的内容</h1>
{% endblock 块名%}
HTML转义
通过模版上下文中传递给模版文件的数据里面含有下面的内容,会被转义:
模版上下文,就是通过视图views.py中的函数传递给模版文件的变量
< 转为 <
> 转为 >
' 转为 ';
" 转为 "
& 转为 &
要关闭转义,比如想要传递一段html代码,就需要关闭转义。
1、使用过滤器:safe
{{ 模版变量| safe}}
这个适用于关闭一个变量的转义
2、使用标签:
{% autoescape off%} #off 表示关闭转义,on就是打开。默认是打开的
...
{% endautoescape %}
这个适用于关闭很多变量的转义,在标签中间的代码全部关闭。
模版硬编码中的字符串默认不经过转义。什么是硬编码?
模版中写死的部分,比如:
{{content|default:"<h1>hello</h1"}}
如果conetent没有值,就获取default的值“<h1>hello</h1>”,它默认不经过转义,所以显示一个标题hello
如果要把它当初字符串显示,需要手动转义:
{{content|default:"<h1>hello</h1>"}}

浙公网安备 33010602011771号