Django的模板系统

简介: 【8月更文挑战第13天】

Django的模板系统是一种强大的工具,用于将数据和HTML模板文件结合起来生成最终的Web页面。它使得开发者可以专注于页面的布局和呈现,而将数据的处理逻辑交由视图来完成。

什么是Django模板系统:

  1. 分离逻辑与表现:模板系统将数据的展示逻辑(HTML)与数据处理逻辑(Python代码)分离,遵循MVC架构的原则。
  2. 动态内容生成:模板文件包含静态HTML标记和动态内容,动态内容在运行时由视图提供的数据填充。
  3. 可重用组件:模板可以包含可重用的组件,如头部、尾部、导航栏等,提高开发效率。

怎么理解Django模板系统:

  • 数据绑定:模板系统允许将Python数据模型绑定到HTML元素,实现数据的动态展示。
  • 模板继承:支持模板继承,允许创建基础模板定义通用结构,然后在子模板中扩展或修改。
  • 标签和过滤器:提供了丰富的模板标签和过滤器,用于控制页面逻辑和数据的展示格式。

Django模板系统的代码示例:

  1. 创建模板文件:在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>
    
  2. 在视图中渲染模板:视图函数使用模板来渲染数据。

    # views.py
    from django.shortcuts import render
    
    def home(request):
        return render(request, 'home.html', {
         'message': 'Welcome to the home page!'})
    
  3. 使用模板继承:子模板扩展基础模板。

    <!-- home.html -->
    {% extends 'base.html' %}
    
    {% block title %}Home Page{% endblock %}
    
    {% block content %}
        <h1>{
        { message }}</h1>
    {% endblock %}
    
  4. 使用模板标签和过滤器

    <!-- 使用for标签循环列表 -->
    <ul>
        {% for item in items %}
            <li>{
        { item.name }}</li>
        {% endfor %}
    </ul>
    
    <!-- 使用过滤器格式化日期 -->
    <p>Posted on: {
        { post.date|date:"D, d M Y" }}</p>
    
  5. 访问表单数据

    <!-- 使用表单数据 -->
    <form method="post">
        {% csrf_token %}
        {
        { form.as_p }}
        <button type="submit">Submit</button>
    </form>
    
  6. 使用上下文数据:模板可以访问视图传递的上下文数据。

    <!-- 访问上下文中的变量 -->
    <p>Current user: {
        { user }}</p>
    
  7. 自定义模板标签和过滤器:创建自定义的模板标签和过滤器来扩展模板系统的功能。

    # custom_tags.py
    from django import template
    
    register = template.Library()
    
    @register.filter
    def add_class(value, arg):
        return value + ' ' + arg
    
  8. 加载自定义标签和过滤器

    {% load custom_tags %}
    
    <p class="{
          { some_class|add_class:'new-class' }}">This is a paragraph.</p>
    
目录
相关文章
|
3天前
|
Python
Django 框架的路由系统
Django 框架的路由系统
19 6
|
1月前
|
机器学习/深度学习 数据处理 数据库
基于Django的深度学习视频分类Web系统
基于Django的深度学习视频分类Web系统
53 4
基于Django的深度学习视频分类Web系统
|
1月前
|
数据库 数据库管理 Python
#736421#基于django的个人博客系统
#736421#基于django的个人博客系统
37 4
#736421#基于django的个人博客系统
|
1月前
|
机器学习/深度学习 监控 数据挖掘
基于Django和百度飞桨模型的情感识别Web系统
基于Django和百度飞桨模型的情感识别Web系统
37 5
|
1月前
|
数据库 数据库管理 Python
#73623#基于django的园区对比系统
#73623#基于django的园区对比系统
37 4
|
1月前
|
数据库 数据安全/隐私保护 数据库管理
#099473#基于django的毕业生信息管理招聘系统
#099473#基于django的毕业生信息管理招聘系统
38 4
|
1月前
|
监控 应用服务中间件 网络安全
#637481#基于django和neo4j的日志分析系统
#637481#基于django和neo4j的日志分析系统
33 4
|
1月前
|
数据库 数据安全/隐私保护 数据库管理
#765372#基于django和neo4j的通用数据展示系统
#765372#基于django和neo4j的通用数据展示系统
22 1
|
1月前
|
BI Python
基于django的代理商订单管理系统
基于django的代理商订单管理系统
17 0
|
1月前
|
数据可视化 NoSQL 数据库
#879273#基于django/neo4j的通讯录与QQ好友关系管理系统
#879273#基于django/neo4j的通讯录与QQ好友关系管理系统
15 0