模板和模板引擎:
- 模板具有一定的格式或股价,可以动态的生成HTML
- 模板引擎决定以何种方式组织代码
- 一个项目可以有一个或者多个模板引擎(django模板支持DTL和Jinja2模板引擎)
一,章节大概介绍:
1.模板引擎的相关配置,理解模板加载顺序
2.模板变量的使用
3.模板标签的使用
5.模板的继承与包含
6.模板过滤器
7.自定义过滤器
8.掌握DTL与Jinja2的使用区别
二,模板引擎介绍和选择
1.模板和模板引擎:
- 模板具有一定的格式或框架,能够动态地生成HTML
- 模板引擎决定以何种方式组织代码
- 一个项目里可以有一个或多个模板引擎
- 模板就是具有特定内容的HTML文件
- 模板引擎就是将模板中的特定内容替换成Python变量
2,没有模板引擎怎样在浏览器显示HTML
- 从磁盘读取html字符串
- 将满足特定规则的内容进行替换
- 发给浏览器展示
3,有模板引擎后的渲染机制
- 从磁盘读取模板文件(get_template)
- 选择合适的模板引擎(select_template)
- 将特定的内容对模板进行渲染(render)
- 发送给浏览器进行显示
4,为什么要使用模板引擎
- 增加代码的可阅读性
- 提升代码的可维护性
- 增加代码的可扩展性
三,Django模板引擎的相关配置
本节内容:掌握settings.py中模板相关的配置;了解多个模板引擎支持情况下配置;掌握模板的加载顺序
1,templates相关配置
2,同时支持两种模板引擎时
小结:模板查找的顺序:按顺序查找,先根目录后模块目录
三,模板变量的使用
本节内容:掌握模板语法;掌握Python中简单数据类型的渲染;掌握Python中复杂数据类型的渲染;掌握DTL与Jinja2的使用区别
1.掌握模板语法
- {{ variable }}
- 当模板引擎遇到一个变量,它将计算这个变量,然后用结果替换掉它本身
- 变量名称中不能有空格,标点名称,不能以下划线开头
2.掌握Python中简单数据类型的渲染
3.掌握Python中复杂数据类型的渲染
1,渲染Python中的对象
- 语法:{{ object.attribute }}
- dict类型数据的渲染
- list/tuple类型数据的渲染
- list/tuple嵌套dict复杂类型数据的渲染
4.掌握DTD与Jinja2使用区别
- DTL列表不能有空格或者标点符号,而Jinja2可以(下图示范不被允许)
四,模板标签的使用
本节内容:了解模板标签的作用;掌握常用的模板标签;掌握DTL与Jinja2的使用区别
在了解模板标签之前,我们先思考这样一件事:使用变量时有哪些不方便的地方?
- list/tuple如果没有循环标签,肯定很难办
- 如果能加上if等条件判断就好了
- 页面较多,如果能共用部分页面就好了
1. 模板标签的使用:语法:{% tag %}
2.常用的模板标签(循环控制,条件控制,模板注释,URL解析;with语句块,当前时间显示,继承与包含)
循环控制:
语法参考:
{% for item in list_item %}
<li>内容</li>
{% empty %}
<li>暂无内容</li>
{% endfor %}
循环内的变量forloop
for循环dict:
{% for key,value in data.item %}
{{ key }} : {{ value }}
{% endfor %}
重复循环:
{% cycle 'row1' 'row2' %}
与Jinja2的使用区别:
3.条件控制
{% if condition_a %}
满足了A条件
{% elif condition_b %}
满足了B条件
{% else %}
都不满足
{% endif %}
4.模板注释
5.URL解析
与Jinja2的使用区别
五,模板的继承与包含
使用场景:
每个页面都引用了公共的头部,js,css
有几个页面使用了公共的头部
1.了解模板抽象和继承的使用区别
步骤一:将可变的部分圈出来(base.html)
{% block sidebar %}
<!-- 菜单栏里的内容 -->
{% endblock %}
步骤二:继承父模板
{% extends "base.html" %}
步骤三:填充一些新的内容
对于其余的情况,有时候有些公用的模板,我们可以在模板中添加公共部分
步骤一:将 可变的部分拆出来(footer.html)
<footer>
这是页脚公共的部分
</footer>
步骤二:将拆出来的部分包进来(index.html)
{% extends "base.html" %}
{% block content %}
<!-- 页面主要内容区域 -->
{# 公用的footer #}
{% include "footer.html" %}
{% endblock %}
六,模板过滤器
本节内容:了解过滤器的作用;掌握过滤器的使用;掌握Django中常用的过滤器;掌握DTL与Jinja2的使用区别
1,什么是过滤器:对变量进行特殊处理后再渲染
- 过滤器语法 {{ value|filter_name:params }}
- 实例:使用过滤器将字母大写 {{ value|upper }}
2, 内置的过滤器
- 默认值显示 {{ value|default:"" }} {{ value|default_if_none:"无" }}
- 数字四舍五入显示 {{ value|floatformat:3 }}
- 日期对象格式化 {{ value|date:"D d M Y" }}
- 时间对象格式化 {{ value|time:"H:i" }}
- 富文本内容的转义显示 {{ value|safe }}
- 字符串截取 {{ value|truncatechars:9 }} {{ value|truncatechars_html:9 }} {{ value|truncatwords:2 }}
七,自定义过滤器
- 再app模块目录下新建包templatetags
2. 实现过滤器poll_extras.py
3.注册过滤器
4.在模板中使用过滤器