模板和模板引擎
1.模板具有一定的格式或骨架,可以动态的生成HTML
2.模板引擎决定以何种方式组织代码
3.一个项目可以有一个或者是多个模板引擎(目前最常用: DTL Jinja2)
思考:没有模板引擎怎样在浏览器展示HTML
1.从磁盘读取html字符串
2.将满足特定规则的内容进行替换
3.发送给浏览器展示
渲染机制:
step1:从磁盘读取模板文件(get_template)
step2:选择合适的模板引擎(select_template)
step3:将指定内容对模板进行渲染(render)
step4:发送给浏览器显示
template相关配置
①BACKEND——模板引擎配置
django.template.backends.django.DjangoTemplates
django.template.backends.django.jinja2.Jinja2
②DIRS——模板引擎按列表顺序搜索这些目录以查找模板源文件
③APP_DIRS——决定模板引擎是否应该进入每个已安装的应用中查找模板
(每种模板引擎后端都定义了一个惯用的名称作为应用内部存放模板的子目录名称:
DTL——templates目录 Jinja2——jinja2目录)
④OPTIONS——其他选项配置
同时支持两种模板引擎:添加配置模板引擎支持
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')]
} ,
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [os.path.join(BASE_DIR, 'jinja2')]
}
]
1-渲染Python中的变量
语法: {{ variable }}
当模板引擎遇到一个变量,它将计算这个变量,然后用结果替换掉他本身
变量名称中不能有空格或标点符号
2-渲染Python中的变量
语法: {{ object.attribute }}
dict类型数据的渲染
list/tuple类型数据的渲染
list/tuple嵌套dict复杂类型数据的渲染
标签模板的使用
语法:{% tag %}
①循环控制:
{% for item in data_list %}
- 内容
- {% endfor %}
ps: 若for循环中的内容为空,可以用empty标签去输出内容为空时的提示信息
{% empty %} - 内容
②条件控制:
{% if condition_a %}
满足了A条件
{% if condition_b %}
满足了B条件
{% else %}
都不满足
{% endif %}③添加注释:
{# 注释内容 #}④补充:
1-for循环对象
{% for key,value in data.items %}
{{ key }}:{{ value }}
{% endfor %}2-重复循环
{% cycle ‘row1’ ‘row2’ %}3-url标签的使用
{% url ‘url_name’ params %}4-当前时间显示
{% now “jS F Y H:i” %}模板过滤器
语法:
{{ value|filter_name:paramas }}例:首字母大写
{% for item in list_word %} <li>{{ item|capfirst }}</li> {% endfor %}
内置的过滤器
1-日期对象格式化:
{{ value|date:“D d M Y”}}2-默认值显示:
{{ value|default:“unknow” }}
{{ value|default_if_none: “empty” }}3-数字的四舍五入:
{{ value|floatformat:n }}4-富文本的转义显示:
{{ value|safe }}5-字符串截取:
{{ value|truncatechars:n }}
{{ value|truncatechars_html:n }}
{{ value|truncatewords:n }}自定义过滤器
步骤一:在app目录下新建包templatetags
步骤二:实现过滤器poll_filter.py
步骤三:
{% load poll_filter %}
{{ value|filter_name }}
PS: 添加自定义过滤器后记得重启开发服务器模板的抽象和继承
步骤一:将可变的内容圈出来
例:
base.html
{% block sidebar %}
<-- 侧边栏的内容 -->
{% endblock %}步骤二:继承父模板
例:
{% extends “base.html” %}步骤三:填充新的内容
例:
index.html步骤四:复用父模板的内容(可选)
例:
{% extends “base.html” %}
{% block sidebar %}
{{ supper }}
<-- 新的侧边栏的内容 -->
{% endblock %}在模板中添加公共部分
步骤一:将可变的部分拆出来
步骤二:将拆出来的部分包进来