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 提供了许多 内置上下文处理器,你也可以实现自己的其他上下文处理器。
当激活 SessionMiddleware 后,每个 HttpRequest 对象(任何 Django 视图函数的第一个参数) 将得到一个 session 属...
安装Python作为一个 Python 网络框架,Django 需要 Python。Python 包含了一个名为 SQLite 的轻量级数据库,所以你暂时不必自行...
在后台,Django将如何以及在哪里存储文件的决策委托给文件存储系统。这个对象实际上理解文件系统、打开和读取文件等。Django 的...
下表列出了JTextComponent类中包含的某些常用的文本组件方法。...我们可以根据两个标准对文本组件进行分类:number of lines in t...
Java Swing教程 -Java Swing外观和感觉Swing支持可插拔的外观(L F)。Swing支持可插拔的外观(L F)。...lafClassName参数是提供L F...
对selectList查询后的结果用Stream流进行了一些封装,使其可以返回一些指定结果,简洁了api的调用需要项目中已注入对应...
MyBatis-Plus 条件构造器-AbstractWrapperisNotNull(R column)isNotNull(boolean condition, R column)字段ISNOTNULL例:isNotN...
属性(properties)这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的Java属性文件中配置这些属性,也可以在pr...
Spring教程 -Spring表达式语言使用数据库属性文件...bean.property_name在下面的代码中,我们从“addressBean"注入了“country"...
Spring JSR-250 注释Spring还使用基于 JSR-250 注释,它包括 @PostConstruct, @PreDestroy 和 @Resource 注释。因为你已经有了...