Django4 中文入门教程 Django4.0 模板-Django模板语言

2024-02-25 开发教程 Django4 中文入门教程 匿名 10

语法

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 提供了许多 内置上下文处理器,你也可以实现自己的其他上下文处理器。