一 常用
1. {{ 不存在 | default : "xx" }}
2. {{ name | length }}
3. {{ xx | slice "1:-1" }}
4. {{ now | date: "Y-m-d H:i:s" }} now = datetime.now()
5. {{ xx | truncatechars : x }} 截取文字
6. {{ xx | truncatewords : x }} 截取单词
7. {% for k,v in d.item %}
{{ k }} {{ v }}
{% endfor %}
8. {% for person in person_list %}
{{ person.name }}
{ % empty %}
{{ xxx }}
{% endfor %}
9.
{% for name in name_list %}<li class="{% if forloop.first %} 'sb' {% endif %}">
{{ forloop.revcounter }} - {{ name }}</li>
{% endfor %}
forloop.counter 当前索引值默认从1开始
forloop.counter 0 从1开始
forloop.revcounter 倒序索引值默认以1结束
forloop.revcounter 0 以0结束
forloop.firs 是不是第一次循环
forloop.last
10. {{ a-html | safe }}
11. {{ obj | capfirst }} 首字母大写
插入:
cycle
每执行这个标签一次输出参数中的一个值。第一次执行输出第一个参数,第二次执行输出第二个参数,以此 类推。所有参数都输出一遍之后,回到第一个参数,再依次输出。这个标签在循环中特别有用:
{% for o in some_list %}
<tr class="{% cycle 'row1' 'row2' %}">
...
</tr>
{% endfor %}
firstof:
输出参数中第一个不为 False 的变量值。如果传入的变量都为 False,不输出任何内容。用法示例
{% firstof var1 var2 var3 %}
等效于
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}
for :
可以使用 {% for obj in list reversed %} 反向迭代列表。如果需要迭代列表构成的列表,可以把各个子列 表拆包出来,赋予单独的变量。访问字典中的元素时也可以这么做。假如上下文中有个名为 data 的字典
{% for key, value in data.items %}
{{ key }}: {{ value }}
{% endfor %}
ifchanged:
检查前一次迭代之后值是否变了。{% ifchanged %} 块标签在循环中使用。有两种用法:
1. 检查渲染得到的内容,与之前的状态比较,只在有变化时显示内容。 2. 检查指定的一个或多个变量的值是否有变化。
spaceless :
删除 HTML 标签之间的空白,包括制表符和换行符。用法示例:
{% spaceless %}
<p>
<a href="foo/">Foo</a>
</p>
{% endspaceless %}
这个示例返回的 HTML 如下:
<p><a href="foo/">Foo</a></p>
with:
把复杂的变量缓存到一个简单的名称下。多次访问耗资源的(如访问数据库)方法时可以这么做。例如:
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
addslashes:
在引号前加上斜线。可用于转义 CSV 中的字符串。例如:
{{ value|addslashes }}
如果 value 为 "I'm using Django",输出 "I\'m using Django"。
center:
在指定宽度中居中显示值。例如:
"{{ value|center:"14" }}"
如果 value 为 "Django",输出 "␣␣␣␣Django␣␣␣␣"(␣ 表示一个空格)。
default_if_none:
当且仅当 value 为 None 时使用指定的默认值,否则使用 value 的值。
dictsort:
按参数指定的键排序字典构成的列表,返回排序后的列表。例如:
{{ value|dictsort:"name" }}
divisibleby:
如果值能被参数整除,返回 True。例如:
{{ value|divisibleby:"3" }}
如果 value 为 21,返回 True。
floatformat:
不指定参数时,近似浮点数,只保留一位小数(前提是有小数)。如果指定了整数参数,floatformat 近似时 保留相应位数的小数。
如果 value 为 34.23234,{{ value|floatformat:3 }} 输出 34.232。
length_is:
如果值的长度与参数相等,返回 True,否则返回 False。例如:
{{ value|length_is:"4" }}
ljust:
在指定宽度中左对齐值。例如:
{{ value|ljust:"10" }}
如果 value 为 "Django",输出 "Django␣␣␣␣"(␣ 表示一个空格)。
truncatechars_html :
与 truncatechars 类似,不过知道如何截断 HTML 标签。
urlize :
把文本中的 URL 和电子邮件地址转换成可点击的链接。支持以 http://、https:// 或 www. 开头的 URL。
urlizetrunc:
与 urlize 一样,把 URL 和电子邮件地址转换成可点击的链接,但是在指定的字符长度处截断 URL。例如:
{{ value|urlizetrunc:15 }}
如果 value 为 "Check out www.djangoproject.com",输出 "Check out <a href="http://www.djangoproject.com" rel="nofollow">www.djangopr…</a>"。与 urlize 一样,这个过滤器只应该应用于纯文本。
yesno:
把 True、False 和 None(可选)映射到字符串“yes”、“no”、“maybe”上,或者是通过参数传入的列表上(以 逗号分隔),根据真假值情况,返回相应的字符串。例如:
{{ value|yesno:"yeah,no,maybe" }}
二 自定义(要重启才能生效)
在app下建templatetags python package,再新建个py文件
mytags.py
from django import template
register = template.Library() # 注册
# 自定义filter
@register.filter(name="aki")
def multi(x, y):
return x*y
# 模板用法是 {{ num | aki:2}} num已经被指定为12, x是管道符前面的参数,y是后面的参数如 2 最多两个参数
# 注意上面的aki:2 :2 不能有空格,否则报参数个数的错误
# 自定义simple_tag
@register.simple_tag(name="desky")
def my_input(x, y, z):
return x*y*z
# 模板用法是 {% desky "x" "xo" "xoo"%} 可以定义多个参数
# 自定义inclusion_tag
@register.inclusion_tag('test.html')
def show_result(n):
n = 1 if n < 1 else int(n)
data = ["第{}项".format(i) for i in range(1, n+1)]
return {"data": data}
text.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% load mytags %}
{% show_result 5 %}
{% desky 2 5 6%}
{{ num | aki:23 }}
{##}
</body>
</html>
test.html
<ul>
{% for choice in data %}
<li>{{ choice }}</li>
{% endfor %}
</ul>
几点说明 filter: 最多两个两个参数,可以进行逻辑判断,{% if i|multi > 1000 %} .....,还有千万注意{ num | aki:2}}不能有空格 引用是 {{}} simple_tag : 可以传多个参数,但不能进行逻辑判断,% desky "x" "xo" "xoo"%} 引用时 {%%}
inclusion_tag('xx.html'): 是将一段html 插入到哪里,这里是将test插入到text中,{% show_result 5 %} 要引用,还要将参数传递进去 最后说的是,新建的python package 必须叫templatetags, 别忘引入{% load mytags %}