Django 模板渲染

一、Django Template Language(DTL)
DTL 即 Django模板语言,Django 模板是一些文本字符串,作用是把文档的表现与数据区分开。模板定义一些占位符和基本的逻辑(模板标签),规定如何显示文档。通常,模板用于生成 HTML。
Django 1.8 还支持另一个流行的模板引擎,Jinja2。
Django 模板渲染_第1张图片
(一)使用Django模板
方式一:

1.导入 Template 和 Context 类

Django 模板渲染_第2张图片
Django 模板渲染_第3张图片
提示:
这样使用了模板系统,但是这没有解决我们在本章开头指出的问题,即模板仍然嵌在 Python 代码中,没有分离数据和表现。为了解决这个问题,我们要把模板放在单独的文件中,然后让视图加载。
(二)将模板单独放置在文件中
Django 模板渲染_第4张图片
在这里插入图片描述
1、模板加载机制
为了从文件系统中加载模板,首先要告诉框架模板的存储位置。这个位置在设置文件中配置,打开 settings.py 文件,找到 TEMPLATES 设置。它的值是一个列表,分别针对各个模板引擎:
Django 模板渲染_第5张图片
BACKEND 的值是指向实现 Django 模板引擎类。内置的后端有 django.template.backends.django.DjangoTemplates和
django.template.backends.jinja2.Jinja2。
因为多数引擎从文件中加载模板,所以各个引擎的顶层配置包含三个通用的设置:
• DIRS 定义一个目录列表,模板引擎按顺序在里面查找模板源文件。
• APP_DIRS 设定是否在安装的应用中查找模板。按约定,APPS_DIRS
设为 True 时,DjangoTemplates 会在INSTALLED_APPS 中的各个应用里查找名为“templates”的子目录。这样,即使 DIRS 为空,模板引擎还能查找应用模板。
• OPTIONS 是一些针对后端的设置。
注意:
TEMPLATE_DIRS:
Django 模板渲染_第6张图片
自1.8版本起,不赞成使用,在一个DjangoTemplates引擎中设置’DIRS’选项来代替
Django 模板渲染_第7张图片
二、模板变量
在Django的模板系统中变量使用的语法:{{ 变量名 }}。
当模版引擎遇到变量,就会用值替换掉变量。
变量的命名可以是字母数字以及下划线 ("")的组合。
变量名称中不能有空格或标点符号。
Django 模板渲染_第8张图片
(一)变量中点“.”的特殊含义
点(.)在模板语言中有特殊的含义。当模版系统遇到点("."),它将以以下顺序查询:
字典查询 :如果向页面传递的是一个字典类型变量,变量名.key 获取值
属性或方法查询:如果传递一个对象,变量名.变量名
(此变量名有可能是属性,有可能是无参数方法名称)。
数字索引查询:如果传递一个列表,变量名.索引。
注意事项:
如果使用的变量不存在, 它被默认设置为(空字符串) 。
三、注释
与 HTML 和 Python 一样,Django 模板语言支持注释。
单行注释使用 {# #} 标明:
{# This is a comment #}
渲染模板时,不输出注释。使用这种句法编写的注释不能分成多行。这一限制有助于提升模板解析性能。
多行注释:使用 {% comment %} 模板标签,
如下所示:
{% comment %}
This is a
multi-line comment.
{% endcomment %}
注释标签不能嵌套。
三、Filters(过滤器)
在Django的模板语言中,通过使用 过滤器 来改变变量的显示。(注:过滤器是函数)
过滤器的语法: {{ 变量名|过滤器名称:参数 }}
使用管道符"|"来应用过滤器。
例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。
过滤器可以串接,即把一个过滤器的输出传给下一个过滤器。
例如:{{ msg|lower|upper }}
将msg变量内容先转换成小写然后再转换成大写。
(一)default
如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。
{{ value|default:“nothing”}}
如果value没有传值或者值为空的话就显示nothing
(二)length
返回值的长度,作用于字符串和列表。
{{ value|length }}
返回value的长度,如 value=[‘a’, ‘b’, ‘c’, ‘d’]的话,就显示4.
(三)slice
切片
格式:{{value|slice:“2:-1”}}
(四)date
日期格式化过滤器
格式:{{ value|date:“Y-m-d H:i:s”}}
(五)safe
Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
比如:value = “点我”
格式:{{ value|safe}}
(六)cut
移除value中所有的与给出的变量相同的字符串
格式:{{ value|cut:’ ’ }},如果value为’i love you’,那么将输出’iloveyou’.
(七)join
使用拼接符连接列表,例如Python的str.join(list)
格式: {{value|join:”
”}}
注意事项:
1.’:'左右没有空格
2.django的模板语言中提供了大约六十个内置过滤器。
四、tags 标签
使用Django中的标签可以在模板中做一些简单的逻辑判断。
标签和{%%}配合使用。
(一)for标签
格式:{%for 临时变量 in 序列 %} … {%endfor%}
Django 模板渲染_第9张图片
Django 模板渲染_第10张图片
在这里插入图片描述
在这里插入图片描述
(二)for…empty标签

如果变量名不存在或者内容为空的时候显示{%empty%}中的内容,否则不执行。
格式:
{% for game in games %}

{% empty %}

{% endfor %}
Django 模板渲染_第11张图片
(三)if 标签
格式:
{% if 判断条件 %}

{% endif %}
注: if 语句支持 and、or、==、<、>、!=、<=,>=,in、not in、is、is not判断。
(四)if … else 标签
格式:
{% if name_length|length > 6 %}

{% else %}

{% endif %}
(五)if…elif…else 标签
格式:
{% if name_length|length > 6 %}

{% elif age == 20 %}

{% else %}

{% endif %}

(六)load 和 static 标签
当我们想在页面上使用一些静态资源例如图片、js、css 。这时候我们就要使用到static标签了。

例如在页面中显示一张本地图片。
操作步骤:
a.新建一个文件夹来盛放静态资源,例如 static,为了和后面的static标签区分,这里使用 statics名称
Django 模板渲染_第12张图片
b.将statics文件夹加载到python搜索路径中。
在这里插入图片描述
c.在页面上最开始位置使用 {%load static %} load 标签 来加载 static 标签。
Django 模板渲染_第13张图片
d.在要展示图片的地方 使用 {% static ‘图片路径’}
{% static ‘图片路径’} 表示 使用
Django 模板渲染_第14张图片
注:如果不想在每一个页面中都使用 {%load static %} ,可在settings.py中进行如下配置
Django 模板渲染_第15张图片
Django 模板渲染_第16张图片
五、模板继承
当我们浏览一个网站的时候发现里面的网页大部分都是相同的,这样我们就可以使用模板继承来除去重复的代码,提高开发效率。
1.定义母板
Django 模板渲染_第17张图片
Django 模板渲染_第18张图片
2.继承母板
语法:{% extends ‘base.html’ %}
Django 模板渲染_第19张图片
Django 模板渲染_第20张图片

你可能感兴趣的:(Django)