一 、常用语法:
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值没传的话就显示nothing2)filesizeformat
将值格式化为一个‘人类可读的“文件尺寸”’(例如‘13kb,4.1mb,‘100bytes’’等等)
例如:{
{ value|filesizeformat }} 如果value是123456789,输出将会是117.7mb3)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']的话,就显示411)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 templateregister = template.Library()@register.filterdef 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
- { % for user in user_list %}
- { { user.name }} { % endfor %}
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
- { % for user in user_list %}
- { { user.name }} { % empty %}
- 空空如也 { % endfor %}
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的值