Django 模板

Django 模版

Django的模板系统是用于将业务逻辑(Python)与展示层(Html)分离的核心组件,它允许开发者通过简单的标签和变量动态生成HTML页面

在之前的学习中使用django.http.HttpResponse()来输出HelloWorld!,该方式将数据与视图混合在一起,不符合Django的思想

下面简单介绍下模板的功能、语法与适用场景

功能 语法/示例 使用场景
变量渲染 {{ variable }} 动态显示数据
逻辑控制 {% if %}, 条件/循环渲染
模板继承 {% extends %}, 避免重复HEML结构
静态文件 加载CSS/JS/图片
自定义过滤器 @register.filter 扩展模板功能

模板应用实例

在之前项目目录下创建一个templates文件夹,并创建test.html文件,完整目录结构如下

test_project/                  # 项目根目录
├── manage.py                  # 项目管理脚本
└── templates
    └── test.html
├── db.sqlite3                 # SQLite 数据库文件
├── __pycache__/               # Python 字节码缓存
└── test_project/              # 项目配置目录(与项目同名)
    ├── src
        └── views.py  
    ├── __init__.py            # 包标识文件
    ├── settings.py            # 项目设置
    ├── urls.py                # 主路由配置
    ├── asgi.py                # ASGI 配置
    └── wsgi.py                # WSGI 配置

test.html 文件代码如下 使用模板中的变量功能

<h1>{{ hello }}</h1>

接着需要向Django说明模板文件的路径,打开settings.py文件,修改TEMPLATES中的DIRS,修改为`[BASI_DIR/"templates]":

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / "templates"],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

现在修改views.py构建一个刚才test.html中使用的hello变量

from django.shortcuts import render

def test(request):
    context = {}
    context['hello'] = 'Hello World!'
    return render(request, 'test.html', context)

这里使用了一个字典context作为参数。context字典中元素的键值hello对应了模板中的变量{{ hello }}

修改utls.py文件

from django.urls import path
from test_project.src import views

urlpatterns = [
    path('', views.test),
]

接下来运行项目打开链接,发现{{ hello }}变量成功被解析为对应的字典值

Django 模板标签

变量

普通变量:

{{ 变量名 }}

列表:

{{ list_name }}
{{ list_name.0 }}

字典:

{{ dic_name }}
{{ dic_name.key }}

其中,字典可以使用.键访问对应的值,列表可以使用.索引访问列表对应索引的值

过滤器

模板语法:

{{ 变量名 | 过滤器: 可选参数 }}

模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示

{{ name | lower}}

变量name被过滤器lower处理后,文档大写转换为文本小写

过滤管道可以连续使用,即一个过滤器管道的输出可以作为下一个管道的输入:

{{ my_list|first|upper }}

以上内容将列表的第一个元素转为了大写

有些过滤器带有参数,过滤器的参数跟随冒号之后,且被双引号包含。

{{ bio|truncatewords:"30" }}

将显示变量bio的前30个词

常用的过滤器

过滤器名称 使用 描述
lower {{ name lower}}
default {{ name default:"张三" }}
length {{ name length }}}
filesizeformat {{ num filesizeformat }}
data {{ time date:"Y-m-d" }}
safe {{ views_str safe }}

逻辑控制

语法:

{% tag %}

控制模板逻辑,常用标签:

标签 用途
{% for %} 循环遍历列表/字典
{% if %} 条件判断
{% extends %} 继承基模板
{% block %} 定义可被子模板覆盖的内容块
{% include %} 嵌入其他模板片段
posted @ 2025-06-16 08:51  风陵南  阅读(24)  评论(0)    收藏  举报