Django的模板系统是一种强大的工具,用于将数据和HTML模板文件结合起来生成最终的Web页面。它使得开发者可以专注于页面的布局和呈现,而将数据的处理逻辑交由视图来完成。
什么是Django模板系统:
- 分离逻辑与表现:模板系统将数据的展示逻辑(HTML)与数据处理逻辑(Python代码)分离,遵循MVC架构的原则。
- 动态内容生成:模板文件包含静态HTML标记和动态内容,动态内容在运行时由视图提供的数据填充。
- 可重用组件:模板可以包含可重用的组件,如头部、尾部、导航栏等,提高开发效率。
怎么理解Django模板系统:
- 数据绑定:模板系统允许将Python数据模型绑定到HTML元素,实现数据的动态展示。
- 模板继承:支持模板继承,允许创建基础模板定义通用结构,然后在子模板中扩展或修改。
- 标签和过滤器:提供了丰富的模板标签和过滤器,用于控制页面逻辑和数据的展示格式。
Django模板系统的代码示例:
创建模板文件:在Django应用中,模板文件通常放在名为
templates
的文件夹内。<!-- base.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}My Site{% endblock %}</title> </head> <body> <header> <!-- 通用头部 --> </header> <main> {% block content %}{% endblock %} </main> <footer> <!-- 通用底部 --> </footer> </body> </html>
在视图中渲染模板:视图函数使用模板来渲染数据。
# views.py from django.shortcuts import render def home(request): return render(request, 'home.html', { 'message': 'Welcome to the home page!'})
使用模板继承:子模板扩展基础模板。
<!-- home.html --> {% extends 'base.html' %} {% block title %}Home Page{% endblock %} {% block content %} <h1>{ { message }}</h1> {% endblock %}
使用模板标签和过滤器:
<!-- 使用for标签循环列表 --> <ul> {% for item in items %} <li>{ { item.name }}</li> {% endfor %} </ul> <!-- 使用过滤器格式化日期 --> <p>Posted on: { { post.date|date:"D, d M Y" }}</p>
访问表单数据:
<!-- 使用表单数据 --> <form method="post"> {% csrf_token %} { { form.as_p }} <button type="submit">Submit</button> </form>
使用上下文数据:模板可以访问视图传递的上下文数据。
<!-- 访问上下文中的变量 --> <p>Current user: { { user }}</p>
自定义模板标签和过滤器:创建自定义的模板标签和过滤器来扩展模板系统的功能。
# custom_tags.py from django import template register = template.Library() @register.filter def add_class(value, arg): return value + ' ' + arg
加载自定义标签和过滤器:
{% load custom_tags %} <p class="{ { some_class|add_class:'new-class' }}">This is a paragraph.</p>