Django2.1-模板概述

模板引擎配置在setting文件的TEMPLATES中

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            # ... some options here ...
        },
    },
]

django.template.loader 模块定义了两个方法来加载模板:

get_template(template_nameusing=None)

这方法传入模板名称来加载模板,返回一个Template对象。

返回值的类型取决于加载模板的BACKEND。get_template()按顺序搜索每个模板引擎,直到匹配到为止。如果没有找到模板,则抛出TemplateDoesNotExist错误。如果模板的语法有问题,则抛出TemplateSyntaxError错误。传入using参数可以限制搜索一个特定的引擎。

select_template(template_name_listusing=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_namecontext=Nonerequest=Noneusing=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对应的结果)

注释:

{# 这是注释 #}

原创文章 7 获赞 139 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qimi923511491/article/details/84306691
今日推荐