📅  最后修改于: 2023-12-03 14:40:47.503000             🧑  作者: Mango
Django 是一款基于 Python 的 web 框架,它提供了很多有用的功能来开发高效、安全、易维护的 web 应用程序。其中之一就是模板引擎,它可以帮助我们更方便地编写、渲染 HTML 模板,从而生成响应内容。
本文将介绍 Django 中如何使用模板引擎进行渲染,包括模板语法、上下文处理器、继承和包含等高级应用。
Django 的模板语法使用双花括号 {% %}
标记和单花括号 {{ }}
标记表示变量和标签。
以下是一些常用的模板标签和过滤器:
{% if %}
和 {% endif %}
{% for %}
和 {% endfor %}
{% block %}
和 {% endblock %}
{% extends %}
{% include %}
{% url %}
:生成 URL{{ }}
:表示要输出的变量|
:过滤器,在变量后面使用过滤器可以对变量进行修改例如,以下是一个简单的模板:
<html>
<head>
<title>{{ title }}</title>
</head>
<body>
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}!</p>
{% else %}
<p>Please log in.</p>
{% endif %}
</body>
</html>
其中 {{ title }}
和 {{ user.username }}
表示要输出的变量,{% if %}
语句用于根据用户是否登录显示不同的内容。
上下文处理器是一种可选的 Django 组件,它可以向模板中添加额外的变量或上下文。每次渲染视图时都会运行上下文处理器,并将其返回的字典添加到模板上下文中。
下面是一个简单的示例:
def my_context_processor(request):
return {'MESSAGE': 'Hello, world!'}
将上下文处理器添加到 context_processors
中:
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',
'myapp.context_processors.my_context_processor',
],
},
},
]
现在,在模板中可以使用 {{ MESSAGE }}
输出 "Hello, world!"
。
Django 的模板还支持继承和包含。继承可以帮助我们重用模板并提高可维护性,而包含可以帮助我们将通用的模板块放在单独的文件中,方便复用。
继承通过 {% extends %}
标签实现,它可以让模板继承另一个模板的块,从而实现模板的重用和覆盖。
以下是一个示例:
<!-- base.html -->
<html>
<head>
<title>{% block title %}Default title{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
<!-- mytemplate.html -->
{% extends 'base.html' %}
{% block title %}
My title
{% endblock %}
{% block content %}
<p>My content goes here.</p>
{% endblock %}
在这个示例中,mytemplate.html
继承了 base.html
,并覆盖了 title
和 content
块。
包含可以通过 {% include %}
标签实现,它允许我们将另一个模板的内容嵌入到当前模板中。
以下是一个示例:
<!-- item.html -->
<li>{{ item.title }}</li>
<!-- list.html -->
<ul>
{% for item in items %}
{% include 'item.html' %}
{% endfor %}
</ul>
在这个示例中,list.html
引用了 item.html
,并在 for
循环中动态生成多个 li
标签。
Django 使用 render()
函数来渲染模板,它需要传递 request
对象、模板名称和上下文变量,最后返回一个 HttpResponse
对象。
以下是一个示例:
from django.shortcuts import render
def my_view(request):
context = {'title': 'My title', 'items': [{'title': 'Item 1'}, {'title': 'Item 2'}]}
return render(request, 'mytemplate.html', context)
在这个示例中,我们定义了一个 my_view
视图函数,它将模板名称 mytemplate.html
和上下文变量 context
传递给 render()
函数,最后返回一个 HttpResponse
对象。
Django 的模板引擎是一个非常强大的工具,它提供了丰富的语法和高级功能,可以帮助我们更方便地编写、渲染 HTML 模板。本文介绍了一些基本的语法和高级应用,希望能够对 Django 开发者有所帮助。