目录

  1. 什么是 Django 模板?
  2. 创建 Django 模板
  3. 模板语言基础
  4. 传递数据到模板
  5. 模板继承
  6. 模板过滤器与标签
  7. 模板常见问题与解决方案
  8. 参考资料

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 视图中,我们将 nameitems 数据传递给模板 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>版权所有 &copy; 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 模板标签

模板标签用于执行逻辑操作,例如 iffor 标签。Django 提供了许多内置标签,如 includeblock

{% include 'navbar.html' %}


7. 模板常见问题与解决方案

1. 模板没有渲染数据

检查视图中传递给模板的上下文变量名称是否正确,并确保模板文件名和路径正确。

2. 模板继承不起作用

确保子模板使用 {% extends 'base.html' %},并且父模板中的 block 标签已正确设置。


8. 参考资料

出站链接

站内链接