Django模板中只需要记住两种特殊符号 : {{ }}和{% %} ;
{{ }}表示变量 , 在模板渲染的时候替换成值 ; {% %} -- "标签"( tag ) : 表示逻辑相关的操作 ;
注意 :
.
来取相关的内容 , 模板语法中没有[ ]和( ) ;.
时 , 会按照如下的顺序取查询 ( 如类和字典或者列表重名时 ) :
Filters翻译过来叫过滤器 , 用来修改变量的显示结果 ;
语法: {{ value | filter_name:参数 }} ; 参数最多只有一个(可以没有), 并且 : 两边没有空格!!!!!
default的意思:xxx是变量,如果没有这个变量或者变量为空(空列表,空字典,None都是空)时,用default的值;如果变量本身有值,就显示自己的值 ;
{{ xxx|default:‘没有传参‘ }}
这个过滤器没有参数,filesize:‘文件大小‘,比如定义filesize=100,加上这个过滤器就显示100bytes,如果数值较大会自动更新为合适的单位,最大显示到PB ;
{{ filesize|filesizeformat }}
加法 : 参数可以是正数也可以是负数;参数写成字符串(‘-11‘)也可以,会硬转化成整数再去加 ;
{{ age|add:-11 }}
拼接 : 变量和参数都是字符串,就是字符串的拼接;如果变量和参数都是列表就是列表的拼接 ;
{{ string|add:‘ is dsb‘ }}
所有字母都变成小写 ;
{{ string|lower }}
所有字母都变成大写 ;
{{ string|upper }}
显示长度,这里:列表加上自己再显示其长度,就显示hobby_list长度的2倍 ;
{{ hobby_list|add:hobby_list | length }}
切片,‘‘中写的内容和Python中[]里面写的内容相同 ;
{{ hobby_list|slice:‘::2‘ }}
取第一个元素 ;
{{ hobby_list|first }}
取最后一个元素 ;
{{ string|last }}
将列表中的元素按照什么拼接 ;
{{ hobby_list|join:‘-‘ }}
显示多少字符长度的内容,最后显示的...也计入10之中,也就是说如果参数是3,那就显示三个点了 ;
{{ long|truncatechars:10 }}
显示多少单词长度的内容,按空格分 ;
{{ long|truncatewords:10 }}
日期时间格式化 ;
这个日期时间格式化之后显示的就是按照这个格式(如:‘2017-01-01 12:12:12‘) ;
{{ now|date:‘Y-m-d H:i:s‘ }}
如果在settings.py中把USE_L10N = False 再加一行:DATETIME_FORMAT = ‘Y-m-d H:i:s‘ 这样的效果和格式化之后的一样,如果前端页面需要格式化的变量比较多时可以选择这个:这里还可以只格式化日期或者只格式化时间:DATE_FORMAT和TIME_FORMAT ;
如果不用格式化,只修改settings.py中的语言和时区就是显示成‘2017年01月01日 12:12:12‘
Django的模板中会对HTML标签和JS等语法标签进行自动转义 , 但是有时候我们不希望这些HTML元素被转义 , 这里就是使用safe
value = ‘<a href="http://www.baidu.com">百度</a>‘
{{ value|safe }}
用{% %}表示的就是标签
# {{ forloop.counter0 }} 0,1,2 从0开始
# {{ forloop.revcounter }} 3,2,1
# {{ forloop.revcounter0 }} 2,1,0 到0结束
# {{ forloop.first }} 第一个是True,其余都是false ; lase反之
# {{ forloop.parentloop }} 本层循环的外层循环的变量
# {% empty %} 有数据显示数据,没有数据时可以自定义显示内容
<ui>
{% for hobby in hobby_list %}
<li>{{ forloop.counter }} {{ hobby }}</li>
{% empty %}
<li>没有数据</li>
{% endfor %}
</ui>
if...else : 有些情况并不支持 , 这里举例说明
# 1+1>1,无法完成,要借助于过滤器
{% if 1|add:1 > 1 %}
真
{% edif %}
# 不支持连续判断
# 说明: 10>5>1 在Python中显示为True(10>5:True,5>1:True;两个True取交集所以成立);而模板语法类似于JS(10>5为True,True>1就是False)
相当于取别名 , 只能在with范围内使用 : 可以将一些临时用的比较频繁 , 名称又比较复杂的变量用with取别名 ;
{% with ... as ... %} # 这行也可以写成 : {% with ...=... %}
...
{% endwith %}
这个标签可以跨站请求伪造保护 ;
在前端页面的form表单里面写上{% csrf_token %} , 在form表单中有一个隐藏的input标签 name=‘csrfmiddlewaretoken‘ value是一直在变的
提取多个页面公共部分放在一个母版中 , 定义上多个block块 , 让子页面重新复写
# 母版 --> index.html
{% block content %}
可以被替换的内容
{% endblock %}
# 继承页面中
{% extends ‘index.html‘ %}
{% block content %}
替换成自己的内容
{% endblock %}
注意 :
可以将常用的页面内容( 一小段代码段 ) , 如导航条,页面信息等组件保存在单独的html文件中 , 然后在需要使用的地方按如下语法导入即可 .
{% include ‘nav.html‘ %}
注意 :
用上{% load static %} 就不用担心settings.py中的STATIC_URL = ‘/static/‘修改名字了 ;
{% load static %}
# 页面中导入css,js的上面写上{% load static %},导入时可以这样写
# {% static ‘css/js等静态文件的相对路径‘ %} 如下面:
<link rel=‘stylesheet‘ href="{% static ‘plugins/bootstrap-3.3.7-dist/css/bootstrap.min.css‘ %}">
{% get_static_prefix %} 就是获取settings.py中的STATIC_URL = ‘/static/‘ 的‘/static/‘ , 如果需要单独使用一次STATIC_URL的值 , 可以用这个 ,了解即可 .
原文:https://www.cnblogs.com/richard_A/p/13804856.html