概要
在任何 Web 开发过程中,渲染和展示数据是不可或缺的一部分。Django 作为一个高效的 Python Web 框架,提供了一个强大且灵活的模板系统。本文将详细介绍 Django 模板系统的核心概念、语法和高级功能。
一、Django 模板系统简介
Django 的模板系统允许开发者使用模板语言来生成动态 HTML 输出。模板包含变量,这些变量会被 Django 替换为实际的值,并且模板也包含标签,这些标签允许逻辑编程比如循环或判断。
二、基本使用
- 「创建模板」
假设你有一个名为 myapp
的 Django 应用,可以在该应用下创建一个名为 templates
的文件夹,并在其中创建模板文件,例如 index.html
。
myapp/
├── templates/
│ └── index.html
└── ...
- 「编写模板」
在 index.html
文件中,你可以使用 Django 模板语言来创建动态内容。
<html>
<body>
<h1>Welcome {{ user.username }}</h1>
<ul>
{% for item in item_list %}
<li>{{ item.name }}</li>
{% endfor %}
</ul>
</body>
</html>
在这个例子中,{``{ user.username }}
是一个变量,而 {% for item in item_list %}
是一个模板标签用于循环。
- 「渲染模板」
在你的 Django 视图中,你可以使用 render
函数来渲染模板。
from django.shortcuts import render
def index(request):
context = {'user': request.user, 'item_list': Item.objects.all()}
return render(request, 'index.html', context)
三、模板继承
模板继承是 Django 模板系统中最强大的部分之一。
- 「基础模板」
创建一个基础模板 base.html
,其中包含网站的共同结构和元素。
<html>
<head>
<title>{% block title %}My Website{% endblock %}</title>
</head>
<body>
<header>
<!-- 头部内容 -->
</header>
<main>
{% block content %}{% endblock %}
</main>
<footer>
<!-- 脚部内容 -->
</footer>
</body>
</html>
- 「子模板」
在子模板中,你可以通过定义块(blocks)来重写基础模板中的内容。
{% extends 'base.html' %}
{% block title %}Welcome Page{% endblock %}
{% block content %}
<h1>Welcome {{ user.username }}</h1>
<!-- 更多内容 -->
{% endblock %}
四、模板标签和过滤器
- 「标签(Tags)」
标签提供了在模板中插入逻辑的方式。例如 {% if user.is_authenticated %}
和 {% for item in item_list %}
。
- 「过滤器(Filters)」
过滤器用于在变量被显示之前修改它们。例如,{``{ user.username|lower }}
会将用户名转换为小写。
五、自定义标签和过滤器
你也可以创建自己的模板标签和过滤器。
- 「创建自定义过滤器」
在你的 Django 应用中创建一个名为 templatetags
的文件夹,并在其中创建一个 Python 文件,例如 my_filters.py
。
from django import template
register = template.Library()
@register.filter(name='cut')
def cut(value, arg):
return value.replace(arg, '')
使用 {% load my_filters %}
来在模板中使用这个过滤器。
- 「创建自定义标签」
类似地,你可以在 templatetags
文件夹中创建自定义标签。
六、小结
Django 模板系统提供了一个非常强大且灵活的方式来创建动态的 HTML 页面。通过理解和掌握其核心概念和高级功能,你可以在 Web 开发中更加高效地工作。