前言
django 的模板系统是一个强大的工具,它将视图逻辑与页面设计分开,使得前后端开发人员可以在同一项目中高效协作。以下是对 django 模板渲染功能的详细解析。
django 模板系统概述
django 的模板系统旨在使设计人员能够编写 html,同时以一种安全和灵活的方式动态显示数据。这种分离关注点的设计允许后端开发人员处理业务逻辑,而模板专注于数据的展示。
模板文件
位置: 通常,模板文件(.html)存放在名为
templates的目录下。该目录可以在应用的目录结构中,也可以是全局项目中指定的模板目录。配置: 在
settings.py文件中设置templates,django 查找模板文件的位置。
templates = [
{
'backend': 'django.template.backends.django.djangotemplates',
'dirs': [os.path.join(base_dir, 'templates')],
'app_dirs': true,
'options': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
模板语法
变量: 使用双大括号 {{ }} 包裹变量名以显示变量的值。
<p>hello, {{ user.username }}!</p>
过滤器: 用管道符 | 结合过滤器对变量进行格式化或修改。
<p>current time: {{ current_time|date:"f j, y, p" }}</p>
django 自带许多内置过滤器,如 date, upper, length 等。
标签: 使用 {% %} 包围的标签来实现逻辑操作,控制流或加载模板库。
{% if user.is_authenticated %}
<p>welcome back, {{ user.username }}!</p>
{% else %}
<p>please log in.</p>
{% endif %}
{% for item in item_list %}
<li>{{ item.name }}</li>
{% endfor %}
注释: 模板注释不会输出到生成的 html,使用 {# #} 注释文本。
{# this is a comment #}
模板继承
django 支持模板继承,使得代码更易维护和复用。
父模板: 通常定义一个基本布局,使用 {% block %} 标签定义可重写的区域。
<!-- base.html -->
<html>
<head>
<title>{% block title %}default title{% endblock %}</title>
</head>
<body>
<header>{% block header %}{% endblock %}</header>
<main>{% block content %}{% endblock %}</main>
<footer>{% block footer %}default footer{% endblock %}</footer>
</body>
</html>
子模板: 继承基础模板,并重写定义的块。
{% extends "base.html" %}
{% block title %}page title{% endblock %}
{% block content %}
<p>this is the page-specific content.</p>
{% endblock %}
包含模板
使用 {% include %} 标签将一个模板文件包含在另一个模板中,适用于重复出现的页面片段。
<div class="sidebar">
{% include 'sidebar.html' %}
</div>
上下文处理器
上下文处理器是一个可选的钩子,用于将特定变量自动添加到每个模板的上下文中。通过修改
templates的options来注册。常用的上下文处理器包括
request、static和auth等,这些处理器可以使得模板中访问全局变量变得更简便。
安全性
django 模板系统默认防止跨站脚本攻击(xss),对输出的文本会进行自动转义。
可以使用
safe过滤器对已知安全的字符串进行手动 unescape。
<p>{{ user_input|safe }}</p>
渲染过程
视图加载模板: 在视图函数或类视图中,使用 render 方法加载和渲染模板。
from django.shortcuts import render
def my_view(request):
return render(request, 'my_template.html', {'key': 'value'})
返回 httpresponse: 渲染过程生成 html,并以 httpresponse 形式返回给客户端。
总结
django 的模板系统通过直观的语法和强大的功能分离了表现层和业务逻辑,使得开发过程更简洁和易维护。无论是简单的静态展示还是复杂的动态页面,django 的模板都提供了足够的灵活性和安全性来应对各种需求。通过模板继承、过滤器和标签,开发者可以高效地构建精美的用户界面并确保代码的可重用性。
到此这篇关于django template 模板渲染的实现的文章就介绍到这了,更多相关django template 模板渲染内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论