Django模板系统
引言
在之前的几天中,我们介绍了Django的基本概念、模型和视图。今天我们将探讨Django的模板系统,它负责将数据和HTML模板结合起来,生成最终用户看到的内容。
Django模板系统概述
Django的模板系统是一个强大的工具,用于将动态数据插入到静态或半静态的页面中。它使用自己的模板语言,允许你在HTML中嵌入Python代码。
创建模板
-
创建模板文件:在你的Django应用目录下,创建一个名为
templates
的文件夹。Django会自动在这个文件夹中查找模板文件。 myapp/├── templates/ │ └── base.html └── ...
-
编写模板:在
templates
文件夹中,创建一个HTML文件并编写你的模板。 DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Titletitle>head><body> <h1>Welcome to my siteh1> {% block content %} {% endblock %}body>html>
- 在这个例子中,
{% block content %}
是一个占位符,它允许子模板覆盖或扩展这个部分。
使用模板
-
在视图中加载模板:使用
render
函数来加载模板并传递数据。 from django.shortcuts import renderdef home(request): context = {'name': 'Django'} return render(request, 'home.html', context)
- 配置URL:确保你的URL配置指向正确的视图。
from django.urls import pathfrom .views import homeurlpatterns = [ path('', home, name='home'),]
Django模板语言
Django模板语言提供了许多控制结构,如if语句、for循环等,以及过滤器和标签。
控制结构
- If语句:根据条件渲染内容。
{% if user.is_authenticated %} <p>Welcome, {{ user.username }}!p>{% else %} <p>You are not logged inp>{% endif %}
- For循环:遍历列表或查询集。
<ul>{% for post in posts %} <li>{{ post.title }}li>{% endfor %}ul>
过滤器
过滤器可以用来修改变量的值。
- 日期格式化:
<p>Posted on: {{ post.published_date|date:"D, d M Y" }}p>
- 字符串截取:
<p>Short title: {{ post.title|truncatewords:10 }}p>
自定义过滤器
你还可以创建自定义过滤器。
-
创建自定义过滤器:在你的应用目录下,创建一个
templatetags
文件夹,并在其中创建一个__init__.py
文件和一个Python文件,比如custom_filters.py
。 myapp/├── templatetags/ │ ├── __init__.py │ └── custom_filters.py └── ...
- 编写自定义过滤器:
# custom_filters.pyfrom django import templateregister = template.Library()@register.filterdef add(value, arg): try: return int(value) + int(arg) except ValueError: return value
- 在模板中使用自定义过滤器:
{{ 5|add:"3" }}
模板继承
模板继承允许你创建一个基础模板,并让其他模板继承它,这样你可以保持一致的布局和样式。
-
创建基础模板:我们已经在上文中创建了一个基础模板
base.html
。 - 创建子模板:创建一个子模板,继承并扩展基础模板。
{% extends 'base.html' %} {% block content %}<h2>Welcome to the Home Pageh2>{% endblock %}
总结
在今天的教程中,我们学习了Django模板系统的基本概念,包括如何创建模板、使用模板、Django模板语言的控制结构、过滤器以及模板继承。模板系统是Django中渲染动态内容的关键部分,它使得前端开发变得更加简单和高效。