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 %} |
嵌入其他模板片段 |

浙公网安备 33010602011771号