模板引擎配置在setting文件的TEMPLATES中
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { # ... some options here ... }, }, ]
django.template.loader 模块定义了两个方法来加载模板:
get_template(template_name, using=None)
这方法传入模板名称来加载模板,返回一个Template对象。
返回值的类型取决于加载模板的BACKEND。get_template()按顺序搜索每个模板引擎,直到匹配到为止。如果没有找到模板,则抛出TemplateDoesNotExist错误。如果模板的语法有问题,则抛出TemplateSyntaxError错误。传入using参数可以限制搜索一个特定的引擎。
select_template(template_name_list, using=None)
这方法和get_template方法类似,不同的是它接收模板名称的列表,它将按顺序匹配每个名称并返回第一个匹配到的模板。
由get_Template()和select_Template()返回的模板对象必须提供具有以下签名的render()方法:
Template.render(context=None,request=None)
用给定的context渲染模板。如果传入了context参数,则context必须为dict对象,如果没有传入,则将渲染一个不带context的模板。
如果传入了request参数,它必须为HttpRequest。
为了减少加载和渲染模板的重复性,django提供了一个自动处理的快捷函数:
render_to_string(template_name, context=None, request=None, using=None)
render_to_string()加载一个模板get_template(),并立刻调用它的render()方法。它需要下面的参数:
- template_name:要加载模板的名称
- context:用作渲染模板的dict
- request:HttpRequest对象
- using:限制搜索模板的引擎
此函数直接返回HttpResponse对象
模板引擎可在django.template.engines中使用:
from django.template import engines
django_engine = engines['django']
template = django_engine.from_string("Hello {{ name }}!")
模板的标签(Tags):
标签的使用:{% Tags %}
autoescape
自动转义标签,要在html中原样输出html标签的时候使用
{% autoescape on %} {{ body }} {% endautoescape %} 对body的内容进行转义,原样输出html标签
block
模板继承,详细看模板继承
comment
多行注解,忽略、不输出{% comment %}{% endcommit %}标签里面的内容
csrf_token
防止跨站点攻击,在表单<form>标签中添加{%csrf_token%}
cycle
用于循环产生字段
{% for o in some_list %} {% cycle 'one' 'two' %}<br/> {% endfor %} 这将会在for循环中交替出现row1和row2字符串 结果为(some_list的长度为5): one two one two one cycle的参数可以为字符串或者为变量 {% cycle 'one' 'two' as str %}->{{str}} 可以在循环中多次引用字符串 结果为: one->one two->two one->one two->two one->one
debug
输出整个调试信息负载,包括当前上下文和导入的模块
extends
与block标签配合使用
filter
{% filter upper|lower %} this is text {% endfilter %} 将filter标签里面的经过upper处理在将结果经过lower处理,filter参数可选择多个
firstof
输出第一个不是False的参数
{% firstof var1 var2 var3 %} 等同于 {% if var1 %} {{ var1 }} {% elif var2 %} {{ var2 }} {% elif var3 %} {{ var3 }} {% endif %} {% firstof var1 var2 var3 "fallback value" %} 当所有参数都为False时,输出"fallback value" 此标签自动转义默认值参数: {% autoescape off %} {% firstof var1 var2 var3 "<strong>fallback value</strong>" %} {% endautoescape %} 可以使用safe管道符忽略转义: {% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %} 可以用一下语法将输出值储存在变量value中: {% firstof var1 var2 var3 as value %}
for
点运算符:
variable.object 优先返回 varialbe['object'] #字典类型查找 variable.object #属性查找 variable.object() #方法调用 variable[object] #列表索引查找
for循环设置中可用的变量
- forloop.counter 循环的当前迭代(1索引)
- forloop.counter0 循环的当前迭代(0索引)
- forloop.revcounter 循环结束时的迭代次数(1索引)
- forloop.revcounter0 循环结束时的迭代次数(0索引)
- forloop.first 如果这是第一次迭代,则为真
- forloop.last 如果这是最后一次迭代,则为真
- forloop.parentloop 对于嵌套循环,这是上一循环的forloop对象
for....empty
配合for标签使用
{% for number in numbers %} number {% empty %} #numbers对象为空时执行 the numbers is empty {% endfor %}
if
条件判断语句
{% if athlete_list %} one {% elif athlete_in_locker_room_list %} two {% else %} three {% endif %} 在if标签中可以使用布尔运算符or and not等 在同一标签中同时使用and 和or时and的优先级将大于or {% if athlete_list and coach_list or cheerleader_list %} 等于 if (athlete_list and coach_list) or cheerleader_list if标签也可以用运算符 == != < > <= >= in is {% if a > b and b > c %} 也可以在if标签中使用过滤器 {% if messages|length >= 100 %} You have lots of messages today! {% endif %}
ifchanged
{% for t in text %} {% ifchanged %}{{ t }}{% endifchanged %} #当t的内容与上次重复时,不显示出来 {%endfor%} #也可以指定判断某个变量 {% ifchanged date.date %} {{ date.date }} {% endifchanged %} #也可以添加{% else %}标签 {% ifchanged match.ballot_id %} some {% else %} some {% endifchanged %}
include
加载一个模板并且用当前的上下文内容渲染它。这标签能用来在一个模板中包含另一个模板,模板的名字可以是一个变量或者是字符串。
{% include "foo/bar.html" %}
模板名是相对于模板加载器的根目录的。字符串参数可以用./或者../开头。
此标签的参数也可以指定一个拥有render()方法渲染内容的Template对象。
#也可以在标签中用with指定参数 {% include "name_snippet.html" with person="Jane" greeting="Hello" %} #可以指定字段only来指定只接受include内的参数来渲染 {% include "name_snippet.html" with greeting="Hi" only %}
load
用于装载自定义的标签或者过滤器的库
lorem
用法:
{% lorem [count] [method] [random] %} count:用来指定要生成的段落或者单词的数目(默认为1) method:w代表单词,p代表html段落,b代表纯文本段落
用来生成测试文本
now
用于格式化显示时间
It is {% now "jS F Y H:i" %} #可以使用反斜杠\进行转义 #也可以将输出的字符串作为变量储存下来 {% now "Y" as current_year %}
regroup
?
resetcycle
重置cycle的计数
#也可以指定重置的cycle标签 {% cycle 'one' 'two' as one %} {% cycle 'one' 'two' as two %} {% resetcycle one %}
spaceless
清除html标签直接的空白符号(只删除标签之间的,标签和文本之间的不删除)
{% spaceless %} <p> <a href="foo/">Foo</a> </p> {% endspaceless %}
templatetag
用法:
{% templatetag param %} 将参数进行转义 param: openblock ----> {% closeblock ----> %} openvariable ----> {{ closevariable ----> }} openbrace----> { closebrace----> } opencomment----> {# closecomment----> #}
url
用给定的名称和可选参数返回结对路径引用,任何特殊的字符都将会用iri_to_uri()编码。
语法:
{% url 'some-url-name' v1 v2 %} #第一个参数是url的name,它可以是字符串或者变量 #额外的参数是可选的,将用作为url上的参数 #也可以使用关键词参数,但位置参数和关键词参数不要混合使用 {% url 'some-url-name' arg1=v1 arg2=v2 %}
如果指定的url不存在,则将会抛出一个NoReverseMatch错误,这将导致服务器返回一个错误页面。
#一下调用将不会直接生成url,而是会保存在变量the_url中 {% url 'some-url-name' arg arg2 as the_url %} #可以使用标签{% block %}限定变量the_url作用的范围
verbatim
停止模板渲染引擎呈现此块标记的内容。
widthratio
按照比例计算数值
{% widthratio this_value max_value max_width %} #可以使用as储存数值
with
简化复杂的变量调用
{% with total=business.employees.count %} #这里可以直接使用total,total的作用域只存在标签体中 {% endwith %} #可以指定更多的参数 {% with alpha=1 beta=2 %} ... {% endwith %}
过滤器:
内置过滤器:django.template.defaultfilters
过滤器改变变量的值和改变标签的参数
语法:
{{ django|title }} #将变量django内容里面的每个单词首字符转换为大写
可以向过滤器传递参数:
{{ my_date|date:"Y-m-d" }}
内建的过滤器:
add
#将参数加载变量value上 {{ value|add:"2" }} #变量和参数也可以是其它的类型(例如string list)
addslashes
转义
{{ value|addslashes }} #如果value是:I'm using Django 将输出:I\'m using Django
capfirst
将值的第一个字母大写
center
{{ value|center:"15" }} #将value居中在宽度为15
cut
{{ value|cut:param }} #将value中的全部param去掉
date
按照给定的格式去格式化日期
default
当值为False时,则输出默认参数
#如果值value为False,则输出nothing {{ value|default:"nothing" }}
default_if_none
和default类似,不过仅在值为None时才输出默认值
dictsort
将列表中的字典按照给定的参数作为字段进行排序
[ {'name': 'zed', 'age': 19}, {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, ] 参数为name 则输出: [ {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, {'name': 'zed', 'age': 19}, ]
或者是:
{{ value|dictsort:0 }} #参数应该输入int类型,而不是字符串类型 value: [ ('a', '42'), ('c', 'string'), ('b', 'foo'), ] 排序后: [ ('a', '42'), ('b', 'foo'), ('c', 'string'), ]
dictsortreversed
工作原理和上面一样,不过是倒序排序
divisibleby
#如果value能被参数'3'整除,则输出True,否则输出False {{ value|divisibleby:"3" }}
escape
转义,在html中输出html标签的字符串表达
escapejs
??
filesizeformat
{{ value|filesizeformat }} #将value转换为有利于理解的文件大小字符串表示
first
返回列表中的第一个元素
{{ value|first }}
floatformat
如果不带参数,则四舍五入到小数点后一位
如果带参数,则四舍五入保留参数大小的小数个数(n为参数大小)
如果参数为零,则不保留小数
如果参数为负数,则四舍五入保留参数绝对值大小的小数个数,如果小数点后全为零,则忽略小数
force_escape
类似于escape,此过滤器立即应用并返回一个新的转义字符串
get_digit
给定一个整数,返回请求的数字
{{ value|get_digit:"2" }} #返回value的十位数字 #若参数为3,则返回百位数字
iriencode
将value转换为适合包含在URL中的字符串表达形式
join
用给定的字符串连接列表,返回最终字符串表达形式
类似python的str.join(list)
json_script
New in Django 2.1
安全地将Python对象输出为JSON,包装在<script>标记中,以便与JavaScript一起使用。
{{ value|json_script:"hello-data" }} #如果value为{'hello': 'world'} #则输出: <script id="hello-data" type="application/json">{"hello": "world"}</script>
last
返回列表中最后的元素
{{ value|last }}
length
返回序列对象的长度,对于未知类型,则返回0
length_is
如果给定序列的长度等于传入的参数,则返回True,否则返回False
linebreaks
将换行符转换为<br>
一个新行加上一个空行变成了段落换行符</p>
linebreaksbr
将换行符转换为<br>
linenumbers
显示文本的行数
one two three 转换为: 1. one 2. two 3. three
ljust
{{ value|ljust:"10" }} #如果value是django,则输出 "Django "
lower
将给定的字符串全部转换为小写字符
make_list
将给定的字符串转换为列表
phone2numeric
将电话号码转换成数字输出
pluralize
应用于英文复数场景,参数可以定义输出的后缀
pprint
调试用??
random
随机输出给定的列表中的元素
{{ value|random }} #如果value是['a','b','c'],则随机输出其中的一个
rjust
类似于ljust,不过对齐方式是向右
safe
标记内容,表示不用被转义
safeseq
类似于safe,但应用于列表中的每个参数
slice
给定一个列表,返回列表的切片对象
slugify
转换为ASCII。将空格转换为连字符。删除非字母数字、下划线或连字符的字符。转换为小写的。还可以去掉开头和结尾的空白。
"Joel is a slug" 转换为 "joel-is-a-slug"
stringformat
根据给定的参数格式化变量
{{ value|stringformat:"E" }} #如果value为10,则输出1.000000E+01
striptags
将给定的字符串中的html的全部标签删除
time
格式化时间
{{ value|time:"H:i" }} #value为时间
timesince
{{ start|timesince:later }} #代表自从start之后,到later过了多少时间 #相当于返回later-start
timeuntil
{{ start|timeuntil:before }} #before为可选参数,代表在start之间的时间 #返回从bofore到start过了多少时间(start-before)
title
将给定的字符串中所有的单词的首字母转换为大写,其它字符转换为小写
truncatechars
缩短字符串长度为给定的参数,缩短后字符串带...后缀
{{ value|truncatechars:9 }} #value="Joel is a slug" #输出"Joel i..."
truncatechars_html
类似truncatechars,但忽略html标签,将标签里面的内容自动缩短。
{{ value|truncatechars_html:9 }} #value="<p>Joel is a slug</p>" #输出"<p>Joel i...</p>"
truncatewords
类似truncatechars,但以一个单词为单位计算。
truncatewords_html
类似truncatechars_html,但以一个单词为单位计算。
unordered_list
根据给定的嵌套的list自动生成嵌套的列表
upper
将给定的字符串中的字母全部转换为大写字母
urlencode
转义URL中使用的值
urlize
将给定的url地址转换为html中可点击的链接
urlizetrunc
类似于urlize和truncatechars的结合体
wordcount
返回给定字符串中单词的数量
wordwrap
指定每行的长度
{{ value|wordwrap:5 }} #如果value为"Joel is a slug" #则输出 Joel is a slug
yesno
将给定值的布尔值转换为自定义的参数
{{ value|yesno:"yeah,no,maybe" }} #如果value为True,则输出yeah #如果为False,则输出no #如果为None,则输出maybe(此参数可省略,如果省略,则默认输出False对应的结果)
注释:
{# 这是注释 #}