当前位置:  首页>> 技术小册>> Django框架入门指南

模板系统快速入门

在Django框架中,模板系统是一个强大的工具,它允许开发者以简洁、直观的方式将动态内容嵌入到HTML页面中。通过使用模板,你可以将Python代码(主要是视图中的逻辑)与HTML标记分离,从而保持代码的清晰和可维护性。本章将带你快速入门Django的模板系统,包括模板的基本使用、变量、标签、过滤器以及模板继承等核心概念。

一、模板基础

1.1 模板文件的位置

Django会在项目的templates文件夹中查找模板文件。默认情况下,Django会在每个应用的templates子文件夹中查找模板,但推荐的做法是在项目根目录下创建一个统一的templates文件夹,并在设置文件settings.py中通过TEMPLATES配置项指定其路径。例如:

  1. TEMPLATES = [
  2. {
  3. 'BACKEND': 'django.template.backends.django.DjangoTemplates',
  4. 'DIRS': [os.path.join(BASE_DIR, 'templates')], # 指定模板文件夹路径
  5. 'APP_DIRS': True,
  6. 'OPTIONS': {
  7. 'context_processors': [
  8. 'django.template.context_processors.debug',
  9. 'django.template.context_processors.request',
  10. 'django.contrib.auth.context_processors.auth',
  11. 'django.contrib.messages.context_processors.messages',
  12. ],
  13. },
  14. },
  15. ]
1.2 渲染模板

在Django视图中,你可以使用render函数来渲染模板并返回给客户端。render函数接受三个主要参数:请求对象、模板名称(或模板名称的列表)以及一个上下文字典,该字典包含了模板中将要使用的变量。

  1. from django.shortcuts import render
  2. def my_view(request):
  3. # 准备上下文数据
  4. context = {'name': 'Django', 'version': '3.x'}
  5. # 渲染模板并返回
  6. return render(request, 'myapp/index.html', context)

二、模板变量

模板变量用于在模板中插入动态内容。在模板中,变量被双花括号{{ }}包围。当模板被渲染时,Django会查找并替换这些变量为相应的值。

  1. <p>Hello, {{ name }}! You are using Django {{ version }}.</p>

如果变量名与Python的保留字冲突,或者包含空格、点号等特殊字符,可以使用点号.来访问对象的属性或字典的键,或者使用下划线_作为前缀来避免冲突。

三、模板标签

模板标签用于在模板中执行逻辑操作,如循环、条件判断等。模板标签被大括号{% %}包围。Django提供了多种内置标签,如forifwith等。

3.1 For循环

for标签用于遍历列表、元组、字典等可迭代对象。

  1. <ul>
  2. {% for item in item_list %}
  3. <li>{{ item }}</li>
  4. {% endfor %}
  5. </ul>
3.2 If条件判断

if标签用于在模板中进行条件判断。

  1. {% if user.is_authenticated %}
  2. <p>Welcome, {{ user.username }}.</p>
  3. {% else %}
  4. <p>Please log in.</p>
  5. {% endif %}

四、模板过滤器

模板过滤器用于修改变量的值,它们被管道符|和过滤器名称包围。Django提供了许多内置过滤器,如upperlowerlength等,也可以自定义过滤器。

  1. <p>The length of the name is {{ name|length }}.</p>
  2. <p>The name in uppercase is {{ name|upper }}.</p>

五、模板继承

模板继承是Django模板系统的一个强大功能,它允许你创建一个基本的“骨架”模板,该模板包含站点共有的元素(如头部、导航栏、底部等),然后你可以创建继承自这个骨架模板的子模板,只需填充或覆盖特定的块(block)即可。

5.1 定义基模板

在基模板中,使用{% block %}标签定义可以被子模板覆盖的块。

  1. <!-- base.html -->
  2. <html>
  3. <head>
  4. <title>{% block title %}My Site{% endblock %}</title>
  5. </head>
  6. <body>
  7. <header>
  8. <!-- 头部内容 -->
  9. </header>
  10. <main>
  11. {% block content %}{% endblock %}
  12. </main>
  13. <footer>
  14. <!-- 底部内容 -->
  15. </footer>
  16. </body>
  17. </html>
5.2 继承基模板

在子模板中,使用{% extends %}标签来指定它继承自哪个基模板,并使用{% block %}标签来覆盖或添加内容到基模板的相应块中。

  1. <!-- home.html -->
  2. {% extends "base.html" %}
  3. {% block title %}Home Page{% endblock %}
  4. {% block content %}
  5. <h1>Welcome to My Site</h1>
  6. <p>This is the home page content.</p>
  7. {% endblock %}

六、自定义模板标签和过滤器

虽然Django提供了丰富的内置模板标签和过滤器,但在某些情况下,你可能需要创建自定义的模板标签或过滤器来满足特定的需求。这可以通过编写Python代码并在Django项目中注册这些自定义标签和过滤器来实现。

6.1 创建自定义模板标签
  1. 在你的应用中创建一个名为templatetags的Python包(如果尚未存在)。
  2. 在该包内创建一个Python模块(如__init__.pymy_custom_tags.py)。
  3. my_custom_tags.py中编写自定义标签的逻辑,并使用@register.tag@register.inclusion_tag等装饰器注册它们。
  4. 在模板中,首先使用{% load my_custom_tags %}加载自定义标签,然后即可使用它们。
6.2 创建自定义模板过滤器

创建自定义模板过滤器的过程与创建自定义模板标签类似,但你需要使用@register.filter装饰器来注册过滤器,并在模板中使用管道符|来应用它们。

七、总结

Django的模板系统是一个功能强大且灵活的工具,它使得将动态内容嵌入到HTML页面中变得简单而直观。通过本章的学习,你应该已经掌握了模板的基本使用、变量、标签、过滤器以及模板继承等核心概念。接下来,你可以通过实践来加深对这些概念的理解,并探索Django模板系统提供的更多高级功能。记住,模板系统只是Django框架中的一个组成部分,要充分利用Django的强大功能,还需要学习并掌握其他组件,如模型(Models)、视图(Views)、表单(Forms)等。


该分类下的相关小册推荐: