Django4.0 模板-Django模板语言
语法
Django 模板是使用 Django 模板语言标记的一个文本文档或Python字符串。模板引擎可以识别和解释一些构造。主要是变量和标签。
模板是通过上下文来渲染的。渲染用变量的值替换变量,变量的值在上下文中查找,并执行标签。其他的一切都按原样输出。
Django 模板语言的语法涉及四个构造。
变量
变量从上下文中输出一个值,上下文是一个类似于字典的对象,将键映射到值。
变量被 {{
和 }}
包围,如下所示:
My first name is {{ first_name }}. My last name is {{ last_name }}.
在上下文为 {'first_name': 'John', 'last_name': 'Doe'}
的情况下,该模板渲染为:
My first name is John. My last name is Doe.
字典查找,属性查找和列表索引查找均以点符号实现:
{{ my_dict.key }}
{{ my_object.attribute }}
{{ my_list.0 }}
如果变量解析为可调用对象,则模板系统将不带任何参数的情况下调用它,并使用其结果代替可调用对象。
标签
标签在渲染过程中提供了任意逻辑。
这个定义是故意含糊的。例如,标签可以输出内容,或用作控制结构如if
语句和 for
循环,或从数据库中抓取内容,甚至可以访问其他模板标签。
标签被 {%
和 %}
包围,如下所示:
{% csrf_token %}
大多数标签都接受参数:
{% cycle 'odd' 'even' %}
一些标签需要开始和结束标签:
{% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}
过滤器
过滤器转换变量和标签参数的值。
它们看起来像这样:
{{ django|title }}
在 {'django': 'the web framework for perfectionists with deadlines'}
的上下文中,这个模板渲染为:
The Web Framework For Perfectionists With Deadlines
有些过滤器需要一个参数:
{{ my_date|date:"Y-m-d" }}
注释
{# this won't be rendered #}
{% comment %}
标签提供多行注释。
组件
引擎
django.template.Engine
封装了 Django 模板系统的实例。直接实例化 Engine
的主要原因是为了在 Django 项目之外使用 Django 模板语言。
django.template.backends.django.DjangoTemplates
是一个简单封装,使 django.template.Engine
适应 Django 的模板后端API。
模板
django.template.Template
代表已编译的模板。模板可以通过 Engine.get_template()
或 Engine.from_string()
获得。
同样 django.template.backends.django.Template
是一个简单封装,使 django.template.Template
适应通用模板 API。
上下文
django.template.Context
除了上下文数据外,还保存了一些元数据。它被传递给 Template.render()
来渲染模板。
django.template.RequestContext
是 Context
的子类,它储存当前的 HttpRequest
并运行模板上下文处理器。
通用 API 没有对应的概念。上下文数据以普通的 dict
传递,而当前的 HttpRequest
则根据需要单独传递。
加载器
模板加载器负责定位模板,加载模板,并返回 Template
对象。
Django 提供了几个 内建模板加载器 并且支持 自定义模板加载器。
上下文处理器
上下文处理器是接收当前的 HttpRequest
作为参数,并返回一个 dict
的数据添加到渲染上下文的函数。
它们的主要用途是将所有模板共享的通用数据添加到上下文中,而无需在每个视图中重复代码。
Django 提供了许多 内置上下文处理器,你也可以实现自己的其他上下文处理器。
更多建议: