Django内置template标签
html过滤{% autoescape on|off %} {{body}} {% endautoescape %}
注释{% comment %} {% endcomment %}
csrf攻击 {% csrf_token %}
循环选择 {% cycle %} <tr class='{% cycle 'row1' 'row2' %}>
使用当前循环选择
<tr> <td class="{% cycle 'row1' 'row2' as rowcolors %}">...</td> <td class="{{ rowcolors }}">...</td> </tr> <tr> <td class="{% cycle rowcolors %}">...</td> <td class="{{ rowcolors }}">...</td> </tr>
注意到变量的值是没有自动转义的,所以要加上显式转义:
{% for o in some_list %} <tr class="{% filter force_escape %}{% cycle rowvalue1 rowvalue2 %}{% endfilter %}"> ... </tr> {% endfor %}
如果你只是想声明这个循环,而不是输出循环的值,那么在标签的最后增加关键字silent。例:
{% for obj in some_list %} {% cycle 'row1' 'row2' as rowcolors silent %} <tr class="{{ rowcolors }}">{% include "subtemplate.html " %}</tr> {% endfor %}
一旦你在cycle定义中使用了关键字silent,随后的cycle标签也会自动使用silent。下面的例子什么也不会输出,即使第二次cycle没有指定silent
{% cycle 'row1' 'row2' as rowcolors silent %} {% cycle rowcolors %}
new in Django1.6
{% load cycle from future %}
此时可以使用autoescape off
{% for o in some_list %} <tr class="{% autoescape off %}{% cycle rowvalue1 rowvalue2 %}{% endautoescape %}"> ... </tr> {% endfor %}
输出地一个不是false的变量
{% firstof var1 var2 var3 %}
等价于
{% if var1 %} {{ var1|safe }} {% elif var2 %} {{ var2|safe }} {% elif var3 %} {{ var3|safe }} {% endif %}
可以加个默认值
{% firstof var1 var2 var3 "fallback value" %}
{% include "name_snippet.html" with person="Jane" greeting="Hello" %}
加入新页面,传入新变量.
重新分组
假设传入的参数如下:
cities = [ {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'}, {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'}, {'name': 'New York', 'population': '20,000,000', 'country': 'USA'}, {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'}, {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'}, ]
我们想按照国家来划分展示:
- India
- Mumbai: 19,000,000
- Calcutta: 15,000,000
- USA
- New York: 20,000,000
- Chicago: 7,000,000
- Japan
- Tokyo: 33,000,000
我们可以使用{% regroup %}
{% regroup cities by country as country_list %} <ul> {% for country in country_list %} <li>{{ country.grouper }} <ul> {% for item in country.list %} <li>{{ item.name }}: {{ item.population }}</li> {% endfor %} </ul> </li> {% endfor %} </ul>
但是相同country必须挨在一起排列
cities = [ {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'}, {'name': 'New York', 'population': '20,000,000', 'country': 'USA'}, {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'}, {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'}, {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'}, ]
否则会输出如下:
- India
- Mumbai: 19,000,000
- USA
- New York: 20,000,000
- India
- Calcutta: 15,000,000
- USA
- Chicago: 7,000,000
- Japan
- Tokyo: 33,000,000
解决办法可以使用
{% regroup cities|dictsort:"country" by country as country_list %}
并且我们也可以使用country的属性进行分类,例如country有一个外键description
{% regroup cities by country.description as country_list %}
假如country是一个选择值,我么可以使用get_country_display来显示它的string而不是key值
{% spceless %}去掉多余的空格
{% spaceless %} <p> <a href="foo/">Foo</a> </p> {% endspaceless %}
效果如下:
<p><a href="foo/">Foo</a></p>
但是只有紧挨着的标签内的空格才会去除,内部的标签空格不会去掉.
{% spaceless %} <strong> Hello </strong> {% endspaceless %}
<strong>里的空格就不会去掉.
url传参
{% url 'path.to.some_view' v1 v2 %} {% url 'path.to.some_view' arg1=v1 arg2=v2 %}
我们可以在url中使用as参数
{% url 'path.to.view' arg arg2 as the_url %}
就可以在页面其他地方使用
<a href="{{ the_url }}">I'm linking to {{ the_url }}</a>
{% verbatim %} {% endverbatim %}禁止template render该内容.
重命名变量内容,减少输入
{% with total=business.employees.count %} {{ total }} employee{{ total|pluralize }} {% endwith %}
也可以
{% with alpha=1 beta=2 %} ... {% endwith %}
排序
{{ value|dictsort:"name" }}
假如value是
[ {'name': 'zed', 'age': 19}, {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, ]
排序后的输出为
[ {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, {'name': 'zed', 'age': 19}, ]
{% for book in books|dictsort:"author.age" %} * {{ book.title }} ({{ book.author.name }}) {% endfor %}
可整除
{{ value|divisibleby:"3" }}
过去了多长时间
{{ blog_date|timesince:comment_date }} 评论的时间距博客发表时间过了多久.
还多长时间
{{ conference_date|timeuntil:from_date }} from_data距conference_data还多长时间.
截取字符
{{ value|truncatechars:9 }} 例如value是"Joel is a slug"输出会是"Joel i..."
{{ value|truncatechars_html:9 }} 假如value是"<p>Joel is a slug<p>"输出会是<p>Joel i...</p>
{{ value|truncatewords:2 }} 假如value是"Joel is a slug"输出会是"Joel is..."
{{ value|truncatewords_html:2 }} 假如value是"<p>Joel is a slug<p>"输出会是<p>Joel is...</p>
{{ value|urlencode:"" }} If value is "http://www.example.org/", the output will be "http%3A%2F%2Fwww.example.org%2F".
{{ value|yesno:"yeah,no,maybe" }}
{% load static %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}"></img>
等价于
{% load static %} <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />