取值
{{ value }} <!-- 值-->
{{ ls.0 }} <!-- 列表-->
{{ dt.name }} <!-- 字典-->
{{ string.upper }} <!-- 对象方法-->
{{ request.user }} <!-- 当前用户-->
{{ request.path }} <!-- 当前网址-->
{{ request.GET.urlencode }} <!-- 当前GET参数-->
for循环
<!-- 语法-->
{% for item in items %}
...
{% empty %}
...
{% endfor %}
<!-- forloop-->
{{ forloop.counter }} <!-- 索引从1开始算-->
{{ forloop.counter0 }} <!-- 索引从0开始算-->
{{ forloop.revcounter }} <!-- 索引从最大长度到1-->
{{ forloop.revcounter0 }} <!-- 索引从最大长度到0-->
{{ forloop.first }} <!-- 当遍历的元素为第一项时为真-->
{{ forloop.last }} <!-- 当遍历的元素为最后一项时为真-->
{{ forloop.parentloop }} <!-- 嵌套循环中获取上一层的forloop-->
if逻辑
{% if cond %}
...
{% elif cond %}
...
{% else %}
...
{% endif %}
with语句
{% with total=business.employees.count %}
{{ total }} employee{{ total|pluralize }}
{% endwith %}
csrf_token
<form action="/tag/" method="post">
{% csrf_token %}
<p><input type="text" name="haiyan"></p>
<input type="submit">
</form>
过滤器调用
{{ false|default:"deval" }} <!-- false或者为空列表时返回deval-->
{{ "hello world!"|length }} <!-- 返回列表长度-->
{{ 84531|filesizeformat }} <!-- 1024为基数格式化为文件尺寸-->
{{ datetime|date:"Y-m-d" }} <!-- 格式化日期-->
{{ "hello world!"|slice:"2:-1" }} <!-- 切片-->
{{ content|truncatechars:20 }} <!-- 字符超过长度截断-->
{{ content|truncatewords:4 }} <!-- 单词超过长度截断-->
{{ tag|safe }} <!-- 标签不作转义输出-->
自定义标签与过滤器
- vi settings.py
TEMPLATES = [
{
# ...
'OPTIONS': {
# ...
'libraries':{
'my_customer_tags': 'yourapp.templatetags.my_customer_tags',
}
},
},
]
或者 pip install django-crispy-forms
- vi
BASE_DIR/app/templatetags
+ mytag.py
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
# 过滤器
@register.filter
def sum_ft(x,y)
return x,y
# 标签
@register.simple_tag
def sum_tag(x,y)
return x,y
@register.simple_tag
def my_input(addr):
return mark_safe('<a href="%s"></a>' %addr)
- 调用
{{ 1|sum_ft:1 }}
{% sum_tag 1 1 %}