模板层
{{}} 变量相关
{%%} 逻辑相关
前端获取容器类型的数据统一使用句点符(.)
模板传递值的方式
# 以字典的方式传值
return render(request,'index.html',{'name':'jason','age0':'18'})
# 将所有变量都传到前台,弊端是前端不需要的也会传到前台
return render(request,'index.html',locals())
过滤器
语法
{{ obj|filter_name:param }} 变量名|过滤器名称:变量
default
如果一个变量是false或者为空,指定默认值
{{ value|default:"nothing" }}
length
返回值的长度
{{ value|length }}
filesizeformat
将值格式化为一个以B,KB为单位的字符串
{{ value|filesizeformat }}
date
格式化当前时间
{{ value|date:"Y-m-d" }}
slice
切片
{{ value|slice:"2:-1" }}
truncatechars
超过指定数量以...显示
{{ value|truncatechars }}
safe
取消转义
{{ value|safe }}
后端实现
from django.utils.safestring import mark_safe
ss = mark_safe("<h1>我是h1</h1>")
标签
for标签:遍历每一个元素
{% for person in person_list %}
<p>{{ person.name }}</p>
{% endfor %}
可以通过{{ forloop }}来获取循环序号
{% empty %}当被循环的对象为空时执行empty后的语句
if标签
与后端逻辑相同
with标签
当一个名字太过复杂可以取别名
{% with 名字 as 别名 %}
{% endwith %}
自定义标签,过滤器,inclusion_tag
都必须做的事
1 必须在app下新建一个名为templatetags的文件夹
2 在文件夹下创建任意名称的py文件
3 在文件内写下面两句话
from django import template
resgiter = template.Library()
4 在html文件中使用时需要加载:{% load 文件名 %}
过滤器
使用的装饰器:@register.filter()
使用方式与过滤器相同
标签
使用的过滤器:@register.simpl_tag()
使用的方式与标签相同
inclusion_tag
调用能够返回一段html代码
使用的装饰器:@inclusion_tag("存放html代码的文件")
使用方式:{% 函数名 参数 %}
模板的继承
写一个模板,留出扩展的区域,可以留多个区域,区域留的越多可扩展性就越高
{% extends 模板文件 %}
{% block 名字 %}
{% endblock %}
在子模板中使用原模板内的内容:{{ block.super }}
模板的导入
写一个组件,可以被重复使用
{% include "模板文件" %}