语法

变量

变量被 {{ 和 }} 包围

  1. My first name is {{ first_name }}. My last name is {{ last_name }}.

模板系统统一使用点符号来访问变量的属性,例如属性查找和列表索引
对于{{ question.question_text }}
1)Django 尝试对 question 对象使用字典查找(也就是使用 obj.get(str) 操作)
2)如果失败了就尝试属性查找(也就是 obj.str 操作)
3)如果这一操作也失败的话,将会尝试列表查找(也就是 obj[int] 操作)。

  1. {{ my_dict.key }}
  2. {{ my_object.attribute }}
  3. {{ my_list.0 }}

标签

标签被 {% 和 %} 包围

  1. {% csrf_token %}

标签可以接受参数

  1. {% cycle 'odd' 'even' %}

一些标签需要开始和结束标签:
image.png
所有内置标签
https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins/

过滤器

过滤器转换变量和标签参数的值。
如下所示,使用title过滤器后,会将question变量值的每个单词首字母大写

  1. {{ question | title }}

addslashes过滤器可以在所有的引号前面增加反斜杠

  1. {{ value|addslashes }}

给定默认值

  1. {{ value|default_if_none:"nothing" }}

所有内置过滤器
https://docs.djangoproject.com/zh-hans/3.2/ref/templates/builtins/#built-in-filter-reference

组件

https://docs.djangoproject.com/zh-hans/3.2/topics/templates/#components

模板引擎

https://docs.djangoproject.com/zh-hans/3.2/topics/templates/#support-for-template-engines

内置两种模板引擎
django.template.backends.django.DjangoTemplates
django.template.backends.jinja2.Jinja2
image.png