Django模版系统
一 、常用语法:
1:{{ }} 表示变量操作,在模版渲染的时候替换成值
2:{% %} 表示逻辑相关的操作
二、变量操作:
1:变量由字母数字和下划线组成
2:模版中支持的写法
{# 取l中的第一个参数 #} {{ l.0 }} {# 取字典中key的值 #} {{ d.name }} {# 取对象的name属性 #} {{ person_list.0.name }} {# .操作只能调用不带参数的方法 #} {{ person_list.0.dream }}
注:当模版系统遇到一个(.)时,会按照如下的顺序去查询
1、在字典中查询
2、属性或者方法的查询
3、数字索引
Filters:过滤器
用来修改变量的显示结果
语法: {{ value|filter_name:参数 }}
“|”左右没有空格
1)default
{{ value|default:"nothing"}} : 如果value值没传的话就显示nothing
2)filesizeformat
将值格式化为一个‘人类可读的“文件尺寸”’(例如‘13kb,4.1mb,‘100bytes’’等等)
例如:{{ value|filesizeformat }} 如果value是123456789,输出将会是117.7mb
3)add
给变量加参数
{{ value|add:"2" }}:value是数字4,则输出的结果为6
{{ first|add:second }}:如果first是[1,2,3],second是[4,5,6],那输出的结果是[1,2,3,4,5,6]
4)lower
{{ value|lower }} 小写
5)upper
{{ value|upper}}大写
6)title
{{ value|title }}标题
7)ljust
{{ value|ljust:"10" }}左对齐
8)rjust
{{ value|rjust:"10" }}右对齐
9)center
{{ value|center:"15" }}居中
10)length
{{ value|length }}返回value的长度,如value=['a','b','c']的话,就显示4
11)slice
{{value|slice:"2:-1"}}切片
12)first
{{ value|first }}取第一个元素
13)last
{{ value|last }}取最后一个元素
14)join
{{ value|join:" // " }}使用字符串拼接列表
15)truncatechars
{{ value|truncatechars:9}}如果字符串字符多于指定的字符数量,那么会被截断。
16)date
{{ value|date:"Y-m-d H:i:s"}}日期格式化
17)safe
{{ value|safe}}
value = "<a href='#'>点我</a>"
通过过滤器‘safe|safe’的方式告诉django这段代码是安全的不必转义
自定义filter
自定义过滤器只是带有一个或两个参数的python函数
变量(输入)的值不一定是一个字符串
参数的值——可以有一个默认值,或完全省略
自定义filter代码文件摆放位置:
app01/ __init__.py models.py templatetags/ # 在app01下面新建一个package package __init__.py app01_filters.py # 建一个存放自定义filter的py文件 views.py
编写自定义filter
from django import template register = template.Library() @register.filter def fill(value, arg): return value.replace(" ", arg) @register.filter(name="addSB") def add_sb(value): return "{} SB".format(value)
使用自定义filter
{# 先导入我们自定义filter那个文件 #}
{% load app01_filters %}
{# 使用我们自定义的filter #}
{{ somevariable|fill:"__" }}
{{ d.name|addSB }}
tags
for
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% endfor %} </ul>
for循环可用的一些参数
1)forloop.counter 当前循环的索引值(从1开始)
2)forloop.counter0 当前循环的索引值(从0开始)
3)forloop.revcounter 当前循环的倒序索引值(到1结束)
4)forloop.revcounter0 当前循环的倒序索引值(到0结束)
5)forloop.first 判断当前循环是不是第一次循环(布尔值)
6)forloop.last 判断当前循环是不是最后一次循环(布尔值)
7)forloop。parentloop 本层循环的外层循环
for...empty
<ul> {% for user in user_list %} <li>{{ user.name }}</li> {% empty %} <li>空空如也</li> {% endfor %} </ul>
if,elif和else
{% if user_list %} 用户人数:{{ user_list|length }} {% elif black_list %} 黑名单数:{{ black_list|length }} {% else %} 没有用户 {% endif %}
注:if语句支持and、or、==、>、<、!=、<=、>=、in、not in、is、is not判断
with
定义一个中间变量
{% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %}
csrf_token
这个标签用于跨站请求伪造保护
在页面的form表单里面写上{%csrf_token%}
注意事项
1)django的模版语言不支持连续判断,即不支持一下写法:
{% if a > b > c %} ... {% endif %}
2)django的模版语言中属性的优先级大于方法
def xx(request): d = {"a": 1, "b": 2, "c": 3, "items": "100"} return render(request, "xx.html", {"data": d})
如上:在使用render方法渲染一个页面的时候,传的字典的有一个key是itens并且还有默认的ditems()方法,此时在模版语言中:
{{ data.items }} 默认会取到items key的值