008---Django的模版层
python的模板:HTML代码+模板语法
<!--模版语法之变量--> <h1>Index </h1> <p>{{ name }}</p> <p>{{ num }}</p> <p>{{ list1 }}</p> <p>{{ info }}</p> <p>{{ b }}</p> <p>{{ alex }}</p> <p>{{ egon }}</p> <p>{{ p_list }}</p> <p>{{ money }}</p> <p>{{ flag }}</p> <p>{{ null_list }}</p> <hr>
<!--模版语法之深度查询 .字符--> <p>列表:{{ list1.1 }}</p> <p>字典:{{ info.name }} {{ info.age }}</p> <p>对象:{{ alex.name }} {{ alex.age }}</p> <p>{{ p_list.1.name }} {{ p_list.1.age }}</p>
1 <!--模版语法之过滤器--> 2 <p>时间:{{ t|date:"Y-m-d H:i:s" }}</p>
3 <!--如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值。例如:--> 4 <p>None值:{{ money|default:'数据为空' }}</p> 5 <p>False:{{ flag|default:'关闭' }}</p> 6 <p>空列表:{{ null_list|default:'无' }}</p>
7 <p>文件大小:{{ file_size|filesizeformat }}</p> 8 9 <p>截取字节数:{{ text|truncatechars:16 }}</p> 10 <p>截取字符数:{{ text|truncatewords:2 }}</p> 11 12 <p>链接:{{ link }}</p> 13 <h1>链接转义:{{ link|safe }}</h1> 14 15 <p>加法:{{ list1.1|add:111 }}</p>
1 标签看起来像是这样的: {% tag %}。标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加载其后的变量将使用到的额外信息到模版中。一些标签需要开始和结束标签 (例如{% tag %} ...标签 内容 ... {% endtag %})。 2 3 4 <!--模版语法之标签--> 5 <h1>for 标签</h1> 6 7 {% for i in list1 %} 8 <p>{{ i }}</p> 9 {% endfor %} 10 <hr> 11 12 {% for key in info %} 13 <p>{{ key }}</p> 14 {% endfor %} 15 <hr> 16 17 {% for person in p_list %} 18 <p>{{ forloop.counter1 }} {{ person.name }} {{ person.age }}</p> 19 {% endfor %} 20 <hr> 21 22 {% for null in null_list %} 23 {% empty %} 24 <p>无内容</p> 25 {% endfor %} 26 27 <hr> 28 <h1>if 标签</h1> 29 {% if money %} 30 <p>土豪,我们做朋友吧</p> 31 {% else %} 32 <p>穷光蛋</p> 33 {% endif %} 34 35 <hr> 36 37 <h1>with 标签</h1> 38 39 {% with p_list.1.name as n %} 40 {{ n }} 41 {% endwith %} 42 43 <hr> 44 <h1>csrf 标签</h1> 45 {% csrf_token %}
自定义标签和过滤器
1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.
2、在app中创建templatetags模块(模块名只能是templatetags)
3、创建任意 .py 文件,如:my_tag_filter.py
1 #! /usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # __author__ = "ziya" 4 # Date: 2018-10-22 5 6 from django import template 7 8 # 固定 9 register = template.Library() 10 11 # 自定义过滤器 只能两个参数 但是可以作为if 的变量 12 @register.filter 13 def multi_fliter(x,y): 14 15 return x*y 16 17 # 自定义标签 可以传多个参数 不可以作为if 的变量 18 @register.simple_tag 19 def multi_tag(x,y): 20 return x*y
4、在使用自定义simple_tag和filter的html文件中导入之前创建的 my_tag_filter.py
1 {% load my_tag_filter %} # 写在最顶端 2 3 <hr> 4 <h1>自定义过滤器</h1> 5 <p>{{ num|multi_fliter:20 }}</p> 6 7 <p>自定义标签</p> 8 <p>{% multi_tag 10 10 %}/p>