模板是 Django MVT 结构的第三个也是最重要的部分。Django中的模板基本上是用HTML,CSS和Javascript编写在.html文件中的。Django框架有效地处理和生成对最终用户可见的动态HTML网页。Django主要使用后端,因此,为了提供前端并为我们的网站提供布局,我们使用模板。根据我们的需求,有两种方法可以将模板添加到我们的网站。
我们可以使用单个模板目录,该目录将分布在整个项目中。
对于我们项目的每个应用程序,我们可以创建一个不同的模板目录。
对于我们当前的项目,为了简单起见,我们将创建一个将分布在整个项目中的单个模板目录。应用级模板通常用于大型项目,或者我们希望为网页的每个组件提供不同的布局。
配置
Django模板可以在app_name/设置中配置.py,
TEMPLATES = [ { # 要使用的模板后端 'BACKEND': 'django.template.backends.django.DjangoTemplates', # 模板目录 'DIRS': [], 'APP_DIRS': True, # 要配置的选项 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
使用 Django 模板
如何使用示例项目在 Django 中使用模板的插图。模板不仅显示静态数据,还显示通过上下文字典连接到应用程序的不同数据库的数据。考虑一个名为极客forgeeks的项目,它有一个名为极客的应用程序。
要呈现模板,需要一个视图和一个映射到该视图的URL。让我们首先在极客/视图中创建一个视图.py,
# 从 django 导入 Http 响应 from django.shortcuts import render # 创建函数 def geeks_view(request): # 创建字典以将数据传递到模板 context ={ "data":"Gfg is the best", "list":[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] } # 使用模板和上下文返回响应 return render(request, "geeks.html", context)
现在我们需要映射一个URL来呈现这个视图,
from django.urls import path from .views import geeks_view urlpatterns = [ path('', geeks_view), ]
最后在 templates/geeks.html 中创建一个模板,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Homepage</title> </head> <body> <h1>Welcome to haiyong.site</h1> <p> Data is {{ data }}</p> <h4>List is </h4> <ul> {% for i in list %} <li>{{ i }}</li> {% endfor %} </body> </html>
Django 模板语言
这是Django模板提供的最重要的设施之一。Django模板是使用Django模板语言标记的文本文档或Python字符串。模板引擎可以识别和解释某些构造。主要的是变量和标签。正如我们在上面的示例中用于循环一样,我们将其用作标记。同样,我们可以使用各种其他条件,例如如果,否则,如果-否则,空等。Django模板语言的主要特征是变量,标签,过滤器和评论。
变量
变量从上下文中输出一个值,该值是一个类似于字典的对象,它将键映射到值。我们从视图发送的上下文对象可以使用Django模板的变量在模板中访问。
语法
{{ variable_name }}
示例
变量被 {{ 和 }} 括起来,如下所示:
python
复制代码
My first name is {{ first_name }}. My last name is {{ last_name }}.
在上下文 {'first_name: “hai”、“last_name”: “yong”} 的情况下,此模板将呈现为:
My first name is hai. My last name is yong.
标签
标记在呈现过程中提供任意逻辑。。例如,标记可以输出内容,用作控制结构,例如“if”语句或“for”循环,从数据库中获取内容,甚至允许访问其他模板标记。
语法
{% tag_name %}
例
标记由 {% 和 %} 括起来,如下所示:
{% csrf_token %}
大多数标签接受参数,例如:
{% cycle 'odd' 'even' %}
过滤 器
Django模板引擎提供用于转换变量和标签参数值的过滤器。我们已经讨论了主要的Django模板标签。标签不能修改变量的值,而过滤器可用于增加变量的值或根据自己的需要修改变量的值。
语法
{{ variable_name | filter_name }}
过滤器可以“链接”。一个筛选器的输出将应用于下一个筛选器。{{ text|scape|换行 }} 是一种常用的习语,用于转义文本内容,然后将换行符转换为
标记。
例
{{ value | length }}
如果值为 ['a'、'b'、'c'、'd'] ,则输出将为 4。
评论
模板忽略 {% 注释 %} 和 {% 结束注释 %} 之间的所有内容。可以在第一个 标记中插入一个可选注释。例如,这在注释掉代码以记录代码被禁用的原因时很有用。
语法
{% comment 'comment_name' %} {% endcomment %}
例:
{% comment "Optional note" %} Commented out text with {{ create_date|date:"c" }} {% endcomment %}
模板继承
Django模板引擎中最强大,因此最复杂的部分是模板继承。模板继承允许您构建一个基本的“骨架”模板,其中包含站点的所有公共元素,并定义子模板可以覆盖的块。扩展标签用于在 Django 中继承模板。需要一遍又一遍地重复相同的代码。使用扩展,我们可以继承模板和变量。
语法
{% extends 'template_name.html' %}
示例 :
假定以下目录结构:
dir1/ template.html base2.html my/ base3.html base1.html
在模板.html中,以下路径将有效:
{% extends "./base2.html" %} {% extends "../base1.html" %} {% extends "./my/base3.html" %}