目录
1. 什么是 Django 模板?
Django 模板是用于生成 HTML 页面的一种语言,它允许开发者将动态内容嵌入到静态 HTML 页面中。通过模板,Django 可以将数据渲染为用户可查看的网页内容。模板是 Django 渲染响应的一部分。
模板的作用
- 展示数据:模板用来展示由视图传递的数据。
- 分离逻辑和展示:模板允许你将 HTML 代码与 Python 逻辑分离,保持代码的清晰和可维护。
2. 创建 Django 模板
2.1 配置模板目录
在 Django 中,你可以在项目的 settings.py
文件中配置模板目录。打开 myproject/settings.py
,找到 TEMPLATES
配置项,确保 DIRS
包含你的模板目录:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'], # 模板文件目录
'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',
],
},
},
]
在这里,我们创建了一个名为 templates
的目录,放置模板文件。
2.2 创建模板文件
在项目根目录下创建 templates
文件夹,并在其中创建 HTML 模板文件,如 index.html
:
myproject/
│── templates/
│ └── index.html
模板内容(index.html
):
<!DOCTYPE html>
<html>
<head>
<title>欢迎来到 Django</title>
</head>
<body>
<h1>你好, {{ name }}!</h1>
</body>
</html>
3. 模板语言基础
Django 模板语言提供了一些基本的标签和语法用于动态生成 HTML。
3.1 变量输出
模板中的变量用双大括号 {{ }}
包裹。例如,{{ name }}
表示输出一个名为 name
的变量。
3.2 条件语句
Django 模板允许使用 {% if %}
、{% else %}
和 {% endif %}
来控制输出。
{% if name %}
<h1>你好, {{ name }}!</h1>
{% else %}
<h1>你好, 世界!</h1>
{% endif %}
3.3 循环语句
使用 {% for %}
来循环遍历列表或其他可迭代对象:
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
4. 传递数据到模板
在视图中,你可以通过 render
函数将数据传递到模板。
4.1 创建视图函数
在 views.py
中创建一个视图,并将数据传递给模板:
from django.shortcuts import render
def home(request):
context = {
'name': 'Django 用户',
'items': ['Apple', 'Banana', 'Cherry'],
}
return render(request, 'index.html', context)
在 home
视图中,我们将 name
和 items
数据传递给模板 index.html
。
4.2 配置 URL 路由
确保在 urls.py
中配置路由:
from django.urls import path
from .views import home
urlpatterns = [
path('', home),
]
5. 模板继承
Django 模板继承允许你在一个基础模板中定义页面的布局和结构,然后在其他模板中继承这些内容。这样可以避免重复代码,提高维护性。
5.1 创建基础模板
首先,创建一个基础模板 base.html
,在其中定义网站的公共部分:
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}Django 网站{% endblock %}</title>
</head>
<body>
<header>
<h1>欢迎访问 Django 网站</h1>
</header>
<div>
{% block content %}{% endblock %}
</div>
<footer>
<p>版权所有 © 2025</p>
</footer>
</body>
</html>
5.2 创建子模板
然后创建一个子模板,继承 base.html
并覆盖 block
内容:
{% extends 'base.html' %}
{% block title %}首页{% endblock %}
{% block content %}
<h2>这是首页内容!</h2>
<p>欢迎来到我们的 Django 网站。</p>
{% endblock %}
6. 模板过滤器与标签
6.1 模板过滤器
模板过滤器用于修改变量的输出。例如,可以使用 date
过滤器格式化日期:
<p>今天的日期是:{{ current_date|date:"Y-m-d" }}</p>
6.2 模板标签
模板标签用于执行逻辑操作,例如 if
和 for
标签。Django 提供了许多内置标签,如 include
和 block
。
{% include 'navbar.html' %}
7. 模板常见问题与解决方案
1. 模板没有渲染数据
检查视图中传递给模板的上下文变量名称是否正确,并确保模板文件名和路径正确。
2. 模板继承不起作用
确保子模板使用 {% extends 'base.html' %}
,并且父模板中的 block
标签已正确设置。
发表回复