1、过滤器
1.1、常用过滤器
1 、{ { 参数1 | 过滤器名字: 参数2 } }
2 、过滤器最多传两个值,最少一个值 { { 'hello world' | slice : '2:3' } }
< p> 过滤器之filesizeformat: { { num| filesizeformat } } < / p>
< p> 过滤器之slice : { { str | slice : "7:11" } } < / p>
第二个参数写0 ,1 ,2 , 都是 . . . , 最少从3 开始
< p> 过滤器之truncatechars: { { str | truncatechars: '30' } } < / p>
< p> truncatewords: { { str | truncatewords: '2' } } < / p>
< p> 过滤器之date: { { ctime| date: 'Y年m月d日-------H时i分s秒' } } < / p>
< p> 过滤器之safe: { { link1| safe } } < / p>
1.2、过滤器大全
1 、add: 将value的值增加2 。使用形式为:{ { value | add: "2" } } 。
2 、addslashes: 在value中的引号前增加反斜线。使用形式为: { { value | addslashes } } 。
3 、capfirst: value的第一个字符转化成大写形式。使用形式为: { { value | capfirst } } 。
4 、cut: 从给定value中删除所有arg的值。使用形式为: { { value | cut: arg} } 。
5 、date: 格式化时间格式。使用形式为: { { value | date: "Y-m-d H:M:S" } }
6 、default: 如果value是False ,那么输出使用缺省值,使用形式: { { value | default: "nothing" } } 。例如,如果value是“”,那么输出将是nothing
7 、default_if_none: 如果value是None ,那么输出将使用缺省值。使用形式: { { value | default_if_none: "nothing" } } ,例如,如果value是None ,那么输出将是nothing
8 、dictsort: 如果value的值是一个字典,那么返回值是按照关键字排序的结果
使用形式: { { value | dictsort: "name" } } ,例如,
如果value是:
[ { 'name' : 'python' } , { 'name' : 'java' } , { 'name' : 'c++' } , ]
那么,输出是:
[ { 'name' : 'c++' } , { 'name' : 'java' } , { 'name' : 'python' } , ]
9 、dictsortreversed: 如果value的值是一个字典,那么返回值是按照关键字排序的结果的反序。使用形式: 与dictsort过滤器相同。
10 、divisibleby: 如果value能够被arg整除,那么返回值将是True 。使用形式: { { value | divisibleby: arg} } ,如果value是9 ,arg是3 ,那么输出将是True
11 、escape: 替换value中的某些字符,以适应HTML格式。使用形式:{ { value | escape} } 。例如,< 转化为 & lt; > 转化为 & gt; ' 转化为 &
13 、filesizeformat: 格式化value,使其成为易读的文件大小。使用形式:{ { value | filesizeformat } } 。例如:13KB,4. 1MB等。
14 、first: 返回列表/ 字符串中的第一个元素。使用形式:{ { value | first } }
16 、iriencode: 如果value中有非ASCII字符,那么将其进行转化成URL中适合的编码,如果value已经进行过URLENCODE,改操作就不会再起作用。使用形式: { { value | iriencode} }
17 、join: 使用指定的字符串连接一个list ,作用如同python的str . join( list ) 。使用形式: { { value | join: "arg" } } ,如果value是[ 'a' , 'b' , 'c' ] ,arg是'//' 那么输出是a// b// c
18 、last: 返回列表/ 字符串中的最后一个元素。使用形式: { { value | last } }
19 、length: 返回value的长度。使用形式: { { value | length } }
20 、length_is:如果value的长度等于arg的时候返回True 。使用形式:{ { value | length_is: "arg" } } 。例如:如果value是[ 'a' , 'b' , 'c' ] ,arg是3 ,那么返回True
21 、linebreaks: value中的"\n" 将被< br/ > 替代,并且整个value使用< / p> 包围起来。使用形式:{ { value| linebreaks} }
22 、linebreaksbr: value中的"\n" 将被< br/ > 替代。使用形式: { { value | linebreaksbr} }
23 、linenumbers: 显示的文本,带有行数。使用形式: { { value | linenumbers} }
24 、ljust: 在一个给定宽度的字段中,左对齐显示value。使用形式: { { value | ljust} }
25 、center: 在一个给定宽度的字段中,中心对齐显示value。使用形式: { { value | center} }
26 、rjust: 在一个给定宽度的字段中,右对齐显示value。使用形式: { { value | rjust} }
27 、lower: 将一个字符串转换成小写形式。使用形式: { { value | lower} }
30 、random: 从给定的list 中返回一个任意的Item。使用形式: { { value | random} }
31 、removetags: 删除value中tag1, tag2. . . . 的标签。使用形式: { { value | removetags: "tag1 tag2 tag3..." } }
32 、safe: 当系统设置autoescaping打开的时候,该过滤器使得输出不进行escape转换。使用形式: { { value | safe} }
33 、safeseq: 与safe基本相同,但有一点不同的就是: safe是针对字符串,而safeseq是针对多个字符串组成的sequence
34 、slice : 与python语法中的slice 相同。使用形式: { { some_list | slice : "2" } }
37 、striptags: 删除value中的所有HTML标签. 使用形式: { { value | striptags} }
38 、time: 格式化时间输出。使用形式: { { value | time: "H:i" } } 或者{ { value | time} }
39 、title: 转换一个字符串成为title格式。
40 、truncatewords: 将value切成truncatewords指定的单词数目。使用形式: { { value | truncatewords: 2 } } 。例如,如果value是Joel is a slug 那么输出将是: Joel is . . .
42 、upper: 转换一个字符串为大写形式
43 、urlencode: 将一个字符串进行URLEncode
46 、wordcount: 返回字符串中单词的数目
2、标签语法
2.1、for循环
2.1.1、views.py
def index ( request) :
ll= [ 'allen' , 'jack' , 'tom' , 'lily' , 'lily' ]
dic= { 'name' : 'allen' , 'age' : 19 }
user_list= [ { 'name' : 'allen' , 'age' : 19 } , { 'name' : 'jack' , 'age' : 18 } , { 'name' : '张三' , 'age' : 22 } , { 'name' : '李四' , 'age' : 99 } , { 'name' : 'tom' , 'age' : 18 } , { 'name' : 'lily' , 'age' : 18 } ]
return render( request, 'index.html' , locals ( ) )
2.1.2、index.html
< h1> 模板语法之标签</ h1>
< h2> for的用法</ h2>
{% for l in ll %}
{# < p> {{ l }}</ p> #}
< p> < a href = " http://127.0.0.1:8080/{{ l }}" > {{ l }}</ a> </ p>
{% endfor %}
< h2> 处理字典的方法</ h2>
{% for foo in dic.keys %}
< p> {{ foo }}</ p>
{% endfor %}
{% for foo in dic.values %}
< p> {{ foo }}</ p>
{% endfor %}
{% for foo in dic.items %}
< p> {{ foo }}</ p>
{% endfor %}
{% for k,v in dic.items %}
< p> key值为:{{ k }},value值为{{ v }}</ p>
{% endfor %}
< h2> 处理列表套字典的方法</ h2>
< table border = " 1" >
< tr>
< td> id号</ td>
< td> 用户名</ td>
< td> 年龄</ td>
</ tr>
{% for dic in user_list %}
< tr>
< td> {{ forloop.counter }}</ td>
< td> {{ dic.name }}</ td>
< td> {{ dic.age }}</ td>
</ tr>
{% endfor %}
</ table>
< h2> for...empty...的用法</ h2>
< ul>
{% for l in ll %}
< li> {{ l }}</ li>
{% empty %}
< li> 没有数据</ li>
{% endfor %}
</ ul>
< h2> forloop对象</ h2>
{% for dic in user_list %}
{% for key,value in dic.items %}
{{ forloop.parentloop.counter }}
< p> {{ key }}:{{ value }}</ p>
{% endfor %}
{% endfor %}
2.2、if语句
2.2.1、view.py
def index ( request) :
flag= True
return render( request, 'index.html' , locals ( ) )
2.2.2、index.html
< h2> if分支</ h2>
{% if flag %}
< p> flag是true</ p>
{% else %}
< p> flag是false</ p>
{% endif %}
2.3、with重命名
2.3.1、view.py
def index ( request) :
helloworldstr = 'hello world'
return render( request, 'index.html' , locals ( ) )
2.3.2、index.html
{% with helloworldstr as a %}
{{ a }}
{{ helloworldstr }}
{% endwith %}
2.4、csrf
< h2> csrf</ h2>
{% csrf_token %}
< input type = " text" name = " csrfmiddlewaretoken" value = " uC35XuP1J2Va74ArYiNw4TMZ0PaZ6V4qvVGCsUQcqiKF5Sr8IrWS0rzpmOmPBrjY" >
3、自定义过滤器和自定义标签
3.1、自定义过滤器
第一步: 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的过滤器
第二步: 在app中创建templatetags包( 包名只能是templatetags,不能修改)
第三步: 在包内,新建py文件(如: my_tags. py)
第四步: 写代码(以将字符串变大写为例的过滤器)
from django import template
register = template. Library( )
@register. filter
def my_upper ( value) :
return value. upper( )
第五步使用: (模板), 先load,再使用
{ % load my_tags % }
{ { 'username' | my_upper } }
3.2、自定义标签
第一步: 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag
第二步: 在app中创建templatetags包( 包名只能是templatetags,不能修改)
第三步: 在包内,新建py文件(如:my_tags. py)
第四步: 写代码(以csrf_token为例的标签和计算数字和的标签)
from django import template
register = template. Library( )
@register. simple_tag
def my_csrf ( ) :
import uuid
res= uuid. uuid4( )
return mark_safe( '<input type="hidden" name="csrfmiddlewaretoken" value="%s">' % res)
@register. simple_tag
def my_add_tag ( a, b, c) :
return a + b + c
第五步使用: (模板), 先load,再使用
{ % load my_tags % }
{ % my_csrf % }
{ % my_tag 1 3 4 % }
4、模板的导入和继承
4.1、模板的导入
第一步: 新建一个 xx. html, 把模板写入( 需要被导入的文件)
第二步: 在你想用的地方执行:
{ % include 'xx.html' % }
4.2、模板的继承(母版)
第一步: 写一个母版,写空盒子
{ % block top % }
{ % endblock % }
第二步: 某个页面要使用母版,引入,扩写盒子
{ % extends 'base.html' % }
{ % block top % }
index页面
{ % endblock % }
补充: 如果需要保留母版中的数据,在对应的block块中执行:
{ { block. super } }
5、静态文件的配置方法
第一种:
< link rel= "stylesheet" href= "/static/bootstrap/css/bootstrap.min.css" >
第二种:
{ % load static % }
< link rel= "stylesheet" href= "{% static 'bootstrap/css/bootstrap.min.css' %}" >
第三种:
{ % load static % }
< link rel= "stylesheet" href= "{% get_static_prefix %}bootstrap/css/bootstrap.min.css" >
{ % load static % }
{ % static "images/myphoto.jpg" as myphoto % }
< img src= "{{ myphoto }}" > < / img>
{ % load static % }
{ % get_static_prefix as static % }
< img src= "{{ static }}images/myphoto.jpg" alt= "Hi!" / >
{ % load static % }
< link rel= "stylesheet" href= "{% static 'bootstrap/css/bootstrap.min.css' as bootstrap %}" >
< link rel= "stylesheet" href= "{{ bootstrap }}" >
{ % load static % }
< link rel= "stylesheet" href= "{% get_static_prefix as static %}" >
< link rel= "stylesheet" href= "{{ static }}bootstrap/css/bootstrap.min.css" >
6、inclusion_tag
第一步: 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag
第二步: 在app中创建templatetags包( 包名只能是templatetags,不能修改)
第三步: 在包内,新建py文件(如: my_tags. py)
第四步: 写代码(inclusion_tag)
@register. inclusion_tag( 'left.html' )
def left ( num) :
dic = { i: '第%s页' % i for i in range ( num) }
print ( dic)
return { 'data' : dic}
@register. inclusion_tag( 'beautiful.html' )
def beautiful ( title, url) :
return { 'title' : title, 'url' : url}
第五步使用: (模板), 先load,再使用
{ % load my_tags % }
{ % left 5 % }
{ % beautiful '名字' '地址' % }
1 、tag需要在代码中写html文件
2 、inclusion_tag代码跟模板分离
6.1、实例演示
6.1.1、my_prev.py文件
@register. inclusion_tag( 'index1.html' )
def my_temp_tag ( num) :
res = { i: '第{}页' . format ( i) for i in range ( num) }
return { 'data' : res}
6.1.2、index1.html文件
<!doctype html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta name = " viewport"
content = " width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" >
< meta http-equiv = " X-UA-Compatible" content = " ie=edge" >
< title> Document</ title>
</ head>
< body>
< ul>
{% for key,value in data.items %}
< li> < a href = " http://127.0.0.1/{{ key }}" > {{value }}</ a> </ li>
{% endfor %}
</ ul>
</ body>
</ html>
6.1.3、视图模板文件
{% load my_prev %}
< p> {% my_temp_tag 10 %}</ p>