Django框架 之 模板语言
浏览目录
- 标签
- 过滤器
一、标签 Tags
1、普通变量
- 普通变量用{{ }}
- 变量名由数字、字母、下划线组成
- 点.在模板语言中用来获取对象相应的属性值
示例:
1
2
3
4
5
6
7
8
|
{ # 取variable中的第一个参数 #} {{ variable. 0 }} { # 取字典dic中key的值 #} {{ dic.key }} { # 取obj_list对象列表中第一个对象的attr属性值 #} {{ obj_list. 0.attr }} { # 点操作只能调用不带参数的方法 #} {{ obj_list. 0.method }} |
2、逻辑判断
逻辑判断用{% %}
for
- 语法:{% for item in item_list %}...{% empty %}...{% endfor %}
- 作用:循环item_list,如果item值为空或不存在,则会执行empty中的代码,切记要写endfor结束循环
-
常用for循环参数:
Variable | Description |
forloop.counter | 当前循环的索引值(从1开始) |
forloop.counter0 | 当前循环的索引值(从0开始 |
forloop.revcounter | 当前循环的倒序索引值(从1开始) |
forloop.revcounter0 | 当前循环的倒序索引值(从0开始) |
forloop.first | 当前循环是不是第一次循环(布尔值) |
forloop.last | 当前循环是不是最后一次循环(布尔值) |
forloop.parentloop | 本层循环的外层循环 |
if
- 语法:
1
{
%
if
some_condition
%
}...{
%
elif
other_condition
%
}...{
%
endif
%
}
- 作用:条件判断,切记要写endif结束条件判断
- 常用与if语句结合的判断关键字
1{
%
if
some_condition
%
}...{
%
elif
other_condition
%
}...{
%
endif
%
}
with
- 语法
1
|
{ % with new_variable = old_variable % }.....{ % endwith % } |
- 作用:定义中间变量
csrf_token
-
语法:在页面的每个form表单中写上
1
|
{ % csrf_token % } |
-
作用:用于跨站请求伪造保护
注释
语法:
1
|
{ # 注释内容 #} |
3、母板系统
继承
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<!DOCTYPE html> <html lang = "en" > <head> <meta charset = "UTF-8" > <meta http - equiv = "x-ua-compatible" content = "IE=edge" > <meta name = "viewport" content = "width=device-width, initial-scale=1" > <title>Title< / title> { % block page - css % } { % endblock % } < / head> <body> <h1>这是母板的标题< / h1> { % block page - main % } { % endblock % } <h1>母板底部内容< / h1> { % block page - js % } { % endblock % } < / body> < / html> |
- 语法
1
|
{ % extends 'base.html' % } |
- 作用:在子页面中在页面最上方使用上面的语法来继承母板
块block
- 语法
1
|
{ % block block_name % }...{ % endblock % } |
- 作用:在子页面中通过定义母板中的block名来对应替换母板中相应的内容
示例:
1
2
3
4
5
|
{ % block page - main % } <p>世情薄< / p> <p>人情恶< / p> <p>雨送黄昏花易落< / p> { % endblock % } |
组件
- 语法
1
|
{ % include 'subassembly.html' % } |
- 作用:可以将常用的固定的HTML内容保存在单独的文件中,在需要的地方用以上语法导入使用
4、静态文件相关
在Settings中设置static静态文件夹,在html中导入。
语法:
1
|
{ % load static % } |
例如:
1
2
|
{ % load static % } <img src = "{% static " images / hi.jpg " %}" alt = "Hi!" / > |
引用JS文件时使用:
1
2
|
{ % load static % } <script src = "{% static " mytest.js " %}" >< / script> |
某个文件多处被用到可以存为一个变量
1
2
3
|
{ % load static % } { % static "images/hi.jpg" as myphoto % } <img src = "{{ myphoto }}" >< / img> |
使用get_static_prefix
1
2
|
{ % load static % } <img src = "{% get_static_prefix %}images/hi.jpg" alt = "Hi!" / > |
或者
1
2
3
4
5
|
{ % load static % } { % get_static_prefix as STATIC_PREFIX % } <img src = "{{ STATIC_PREFIX }}images/hi.jpg" alt = "Hi!" / > <img src = "{{ STATIC_PREFIX }}images/hi2.jpg" alt = "Hello!" / > |
5、自定义simple_tag
- 作用:可以自定义标签,注册后可使用
-
自定义simple_tag的步骤(与自定义Filter类似,不过接收更灵活的参数)
- 在项目的app中创建名为templatetags的文件夹
- 在templatetags的文件夹中创建自定义的py文件,例如:custom_simpletag.py
-
custom_simpletag.py中编写自定义simple_tag,例如:
1
2
3
4
5
6
|
from django import template register = template.Library() @register .simple_tag(name = "my_simpletag" ) def add_simpletag(a,b,c): # 可接收多个参数 return "{} + {} + {}" . format (a, b, c) |
-
- 使用自定义simple_tag前,首先在HTML页面中导入py文件
1
2
|
{ % load custom_simpletag % } { % my_simpletag "1" "2" "3" % } |
6、自定义inclusion_tag
- 作用:返回html代码片段
-
自定义inclusion_tag的步骤
- 在项目的app中创建名为templatetags的文件夹
- 在templatetags的文件夹中创建自定义的py文件,例如:custom_inclusiontag.py
-
custom_inclusiontag.py中编写自定义inclusiontag,例如:
1
2
3
4
5
6
7
8
|
from django import template register = template.Library() @register .inclusion_tag( 'inclusion_tag.html' ) def my_inclusiontag(n): n = 1 if n < 1 else int (n) data = [ "第{}项" . format (i) for i in range ( 1 , n + 1 )] return { "data" : data} |
-
- 在templates文件夹中创建刚才注册的inclusion_tag.html文件
1
2
3
4
5
|
<ul> { % for choice in data % } <li>{{ choice }}< / li> { % endfor % } < / ul> |
-
- 使用自定义my_inclusiontag前,首先在HTML页面中导入py文件
1
2
|
{ % load custom_inclusiontag % } { % my_inclusiontag 10 % } |
二、过滤器 Filter
1、内置过滤器
语法:
1
|
{{ value|filter_name:args }} |
注意:管道符前后没有空格
default
- 语法:
1
|
{{ value: default: "自定义内容" }} |
- 作用:如果value值没传的话就显示自定义内容
length
- 语法:
1
|
{{ value|length }} |
- 作用:返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.
filesizeformat
- 语法:
1
|
{{ value|filesizeformat }} |
- 作用:将value格式化为一个 “人类可读的” 文件大小格式
如果 value 是 123456789,输出将会是 117.7 MB。
slice
- 语法:
1
|
{{value| slice : "start:end" }} |
- 作用:切片
date
- 语法:
1
|
{{ value|date: "Y-m-d H: i:s" }} |
- 作用:将时间格式的value进行自定义格式化
safe
- 语法:
1
|
{{value|safe}} |
- 作用:取消Django对HTML标签和JS等语法标签进行自动转义,认为插入的HTML或JS是安全的不必转义
truncatechars
- 语法:
1
|
{{ value|truncatechars:num}} |
- 作用:如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾。num参数是指截断的字符数
2、自定义过滤器
步骤
- 在项目的app中创建名为templatetags的文件夹
- 在templatetags的文件夹中创建自定义的py文件,例如:custom_filter.py
-
在custom_filter.py中编写自定义过滤器,例如:
1
2
3
4
5
6
|
from django import template register = template.Library() @register . filter (name = "my_filter" ) def my_filter(value, arg): #最多接收两个参数 return value.replace(arg, "") |
- 使用自定义filter前,首先在HTML页面中导入py文件
1
2
|
{ % load custom_filter % } {{ variable|my_filter: "0" }} |