模版
a. 模版渲染的过程
b. {{ xx }} # 取单值
- views.py
def template(request):
return render(request, 'template.html', {'k1': 'v1', 'k2': [1, 2, 3], 'k3': {'name': 'alex'}})
- template.html
{{ k1 }} ==>结果:v1
{{ k2.1 }} ==>结果:2 # 列表取值,相当于k2[1]
{{ k3.name }} ==>结果:alex # 字典取值
c. {% for item in k2 %} # for循环取值
<p>
{{ item }},
{{ forloop.counter }}, # 索引(从1开始)
{{ forloop.counter0 }}, # 索引(从0开始)
{{ forloop.first }}, # 判断是否是第一个(是则返回True)
{{ forloop.last }}, # 判断是否是最后一个(是则返回True)
{{ forloop.revcounter }} # 倒序显示
</p>
{% endfor %}
{% if 1 > 2 %} # if语句,elif和else有则写,没有则不写
<h1>123</h1>
{% elif 1 == 2 %}
<h1>456</h1>
{% else %}
<h1>789</h1>
{% endif %}
d. 模版语言的内置方法
常用帮助方法:
{{ item.event_start|date:"Y-m-d H:i:s"}} # 将时间item.event_start转换成"Y-m-d H:i:s"这样的格式
{{ bio|truncatewords:"30" }} # 只显示字符串bio的前30个字符
{{ my_list|first|upper }} # 将字符串my_list的第一个字符变成大写
{{ name|lower }} # 将name的值转换成小写(大写用upper)。例:{{ k1|lower }}
e. 自定义方法
两类自定义方法:
filter
simple_tag
filter方法步骤:
1、在APP中创建指定文件夹,名称不能改 templatetags
2、templatetags中创建任意 .py 文件,如:xx.py
from django import template
from django.utils.safestring import mark_safe
register = template.Library() # 这句代码必须不变(一个字都不能变)
# 创建函数
@register.filter
def f1(value):
return value + "666"
@register.filter
def f2(value,arg):
return value + "666" + arg
3、使用1:在html模版的头部执行
{% load xx %} # 导入自定义的xx.py文件
4、使用2:
k1 = 'VVV'
{{k1}} => vvv
{{ k1|f1 }} # 使用自定义的f1方法()
{{k1|f2:"alex"}} => vvv666 # 使用自定义的f2方法()。f2需要传入两个参数,除了本身需要的k1外,还需要传入一个参数,格式是f2:"xx" xx是另一个参数
# 自定义方法最多只能传两个参数,要是再多只能自己进行构造了
5、 settings.py 中注册app
mysite
mysite
- settings.py
INSTALLED_APPS = [
... ...
'app01',
]
simple_tag方法步骤:
1、在APP中创建指定文件夹,名称不能改 templatetags
2、templatetags中创建任意 .py 文件,如:xx.py
from django import template
from django.utils.safestring import mark_safe
register = template.Library() # 这句代码必须不变(一个字都不能变)
# 创建函数
@register.simple_tag
def f2(s1, s2, s3, s4):
return s1 + s2 + s3 + s4
3、使用1:在html模版的头部执行
{% load xx %} # 导入自定义的xx.py文件
4、使用2:
{% f2 1 2 3 4 %} # 使用自定义f2函数,后面跟参数,用空格隔开。f2函数有几个参数就传几个参数
5、 settings.py 中注册app
mysite
mysite
- settings.py
INSTALLED_APPS = [
... ...
'app01',
]
总结:
filter
限制:传参个数有限制,最多只能传2个
支持:模版语言的 if 条件
例:f3为自定义filter方法
{% if k1|f3 %} #k1|f3的结果可以作为if的条件
<h1>True</h1>
{% else %}
<h1>False</h1>
{% endif %}
simple_tag
不支持:模版语言的 if 条件。
f. 模版的继承
母板:
... ...
{% block 名称 %} {% endblock %}
... ...
子板:
{% extends '母板html文件名' %}
{% block 名称 %}
具体子页面的内容...
{% endblock %}
g. include
小组件: x.html
{% include 'x.html' %} # 引用这些小组件