autoescape

控制自动转义行为,参数为on / off,使用后必须以endautoescape结束。

{% autoescape on %}
    {{ body }}
{% endautoescape %}

block

block标签可以子模板覆盖。

extends

表示当前模板集成自一个父模板。

  • 方法一:{% extends "base.html" %},表示集成自以”base.html”的父模板。
  • 方法二:{% extends variable %},使用variable变量表示的模板。

include

加载指定的模板并以标签内的参数渲染。include和extends一定要区分开,include类似于Python的import

load

加载自定义模板标签。

comment

忽略{% comment %}{% endcomment %}之间的内容,做为注释。可以用来记录代码被注释掉的原因。不能嵌套使用。

<p>Rendered text with {{ pub_date|date:"c" }}</p>
{% comment "Optional note" %}
    <p>Commented out text with {{ create_date|date:"c" }}</p>
{% endcomment %}

csrf_token

用于防跨站点伪造攻击,常用语表单中。

  • form标签中使用

    {% csrf_token %}
    
  • ajax中使用

    $.ajaxSetup({headers: {"X-CSRFToken": '{{ csrf_token }}'}});
    

filter

通过一个或多个过滤器过滤快的内容。
示例:

{% filter force_escape|lower %}
    This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}

firstof

输出第一个不是False的参数变量,如果传入的所有变量都为False,那么什么也不输出。
示例:

{% firstof var1 var2 var3 %}

等价于:

{% if var1 %}
    {{ var1 }}
{% elif var2 %}
    {{ var2 }}
{% elif var3 %}
    {{ var3 }}
{% endif %}

也可以使用一个默认字符串作为输出,防止传入的所有变量都是False。

{% firstof var1 var2 var3 "fallback value" %}

for

循环对象中的每一个元素。

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

也可以使用{% for athlete in athlete_list reversed %}反向循环遍历。
如果需要访问字典,也可以使用下面的实例:

{% for k, v in data.items %}
    {{k}}: {{ v }}
{% endfor %}

注意,对于点运算符,字典键查找优先于方法查找。因此如果字典中包含一个键itemsdata.items将返回data.["items"]而不是data.items()

for标签置属性,可以当做模板变量一样在模板中使用。

  • forloop.counter:循环的当前索引值,从1开始计数。
  • forloop.counter0:循环的当前索引值,从0开始计数。
  • forloop.revcounter:循环结束的次数,从1开始。
  • forloop.revcounter0:循环结束的此时,从0开始。
  • forloop.first:判断当前是否为循环的第一次,是的话,该变量的值为True,可以配合if判断使用。
  • forloop.last:判断当前是否为循环的最后一次,是的话,返回True。
  • forloop.parentloop:对于循环嵌套,将返回父循环所在循环次数。

    for标签empty从句

    {% empty %}用于在循环遍历中,在循环对象时空或者没有被找到是,可以有所操作和提示。

if

{% if %}会对一个变量求值,如果为True,将会输出对应内容。{% if %}标签后可以带有一个或者多个{% elif %}从句,也可以带有一个{% else %}从句,以便在之前所有条件都不成立的情况下面执行。语句结束时,需要带上{% endif %}

{% if request.user.is_authenticated %}
    Hello, {{ request.user.username }}!
{% else %}
    Please login.
{% endif %}

布尔运算符

if标签内可以使用not, and或or来测试bool值。

{% if athlete_list and coach_list %}
    Both athletes and coaches are available.
{% endif %}

{% if not athlete_list %}
    There are no athletes.
{% endif %}

{% if athlete_list or coach_list %}
    There are some athletes or some coaches.
{% endif %}

{% if not athlete_list or coach_list %}
    There are no athletes or there are some coaches.
{% endif %}

{% if athlete_list and not coach_list %}
    There are some athletes and absolutely no coaches.
{% endif %}

and和or可同时使用,但and优先级高于or:

{% if athlete_list and coach_list or cheerleader_list %}

# 等价于
if (athlete_list and coach_list) or cheerleader_list

在if标签中实际使用括号是错误的语法,如果需要指定优先级,应该使用循环嵌套

if也允许==, !=, <, >, <=, >=, in, not in, is, is not这样的操作

{% if somevar == "x" %}
  This appears if variable somevar equals the string "x"
{% endif %}

{% if somevar != "x" %}
  This appears if variable somevar does not equal the string "x",
  or if somevar is not found in the context
{% endif %}

{% if somevar < 100 %}
  This appears if variable somevar is less than 100.
{% endif %}

{% if somevar > 0 %}
  This appears if variable somevar is greater than 0.
{% endif %}

{% if somevar <= 100 %}
  This appears if variable somevar is less than 100 or equal to 100.
{% endif %}

{% if somevar >= 1 %}
  This appears if variable somevar is greater than 1 or equal to 1.
{% endif %}

{% if "bc" in "abcdef" %}
  This appears since "bc" is a substring of "abcdef"
{% endif %}

{% if "hello" in greetings %}
  If greetings is a list or set, one element of which is the string
  "hello", this will appear.
{% endif %}

{% if user not in users %}
  If users is a QuerySet, this will appear if user is not an
  instance that belongs to the QuerySet.
{% endif %}

{% if somevar is True %}
  This appears if and only if somevar is True.
{% endif %}

{% if somevar is None %}
  This appears if somevar is None, or if somevar is not found in the context.
{% endif %}

{% if somevar is not True %}
  This appears if somevar is not True, or if somevar is not found in the
  context.
{% endif %}

{% if somevar is not None %}
  This appears if and only if somevar is not None.
{% endif %}

比较运算符不能像Python或数学符号中那样链接

# 错误示例
{% if a > b > c %}

# 正确示例
{% if a > b and b > c %}

now

显示当前的日期或时间,可以指定显示格式。

It is {% now "jS F Y H:i" %}

It is the {% now "jS \o\f F" %}  # o、f都将被反斜杠转义,输出为It is the 4th of September

url

返回与给定视图和可选参数匹配的绝对路径引用。在解析后返回的结果路径字符串中,没个特殊字符将使用iri_to_uri()编码。
示例,{% url 'some-url-name' v1 v2 %}
第一个参数是URL模式名。它可以是引用的文字或任何其他上下文变量。其他参数是可选的,应该是空格分隔的值,这些值将用作URL中的参数。上面的示例显示了传递位置参数。也可以使用关键字语法。

with

使用一个简单的名字缓存一个复杂的变量,当需要使用一个代价较大的方法(比如访问数据库)很多次的时候这是非常有用的。
示例:

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}  # 仅在total标签内部有效
{% endwith %}

它也可以分配多个变量

{% with alpha=1 beta=2 %}
    ...
{% endwith %}
0条评论

相关推荐

django教程

r

Django 2019-05-20 10:53:53

Celery

celery学习资料

Django 2019-05-25 18:41:55

Django-rest-framework教程

django-rest-framework教程。

Django 2019-07-18 16:33:26

django实用资料

django项目从0到1自己总结的实用的资料,大部分常用的功能这里都有

Django 2019-05-08 18:21:34