django_模板语法
引
模板语法:
简单来说规定了我们操作templates内容,达到我们想要的结果
一.模板语法之过滤器
# 1.过滤器:
意思可以理解为 过滤不需要的,剩下需要的
# 2.过滤器的语法结构
'是写在html文件内的'
{{ 数据对象 | 过滤器的名称:额外参数 }}
eg:过滤器只能拥有一个额外参数
编号 | 过滤器名称 | 用处 |
---|---|---|
1 | length | 统计数据长度 |
2 | add:111ength | 算数加法或字符串加法统计数据长度 |
3 | filesizeformat | 将数字转换为合适的文件计量单位KBMB |
4 | join:'|' | 拼接 |
5 | default | 判断当前数据对应的布尔值 |
6 | date:'Y-m-d' | 时间格式化 |
7 | sliece:'0:3' | 根据索引切割字符串 |
8 | truncateworde:7 | 按照空格截取文本内容 |
9 | cut:'|' | 移除指定字符 |
10 | safe | 渲染‘是否取消转义’ |
safe可以通过后端代码书写html代码 传递给前端使用
二.模板语法标签
'书写在html文件中'
1.语法结构
{% 名字 %} # if elif else for 等
{% end名字 %}
2.if判断
# b = True
{% if b %}
<p>滋滋滋</p>
{% elif qq %}
<p>害</p>
{% else %}
<p>咋样啊</p>
{% endif %}
# 结果为 滋滋滋
3.for循环
l1 = [11,22,33,44]
{% for foo in l1 %}
<p>{{ forloop }}</p> # forloop可以看成字典也可以看成对象
<p>{{ foo }}</p> # 11 22 33 44
{% endfor %}
4.for循环与if嵌套
{% for i in l1 %}
{% if forloop.first %} #forloop.first这是第一次循环
<p>这是第一次循环</p>
{% elif forloop.last %} #forloop.last这是最后一次循环
<p>这是最后一次循环</p>
{% else %}
<p>中间循环</p>
{% endif %}
{% empty %} # empty 循环为空执行
<p>for循环对象为空 自动执行</p>
{% endfor %}
5.还可以针对字典进行for循环
{% for foo in user_info.keys %}
<p>{{ foo }}</p>
{% endfor %}
# keys 获取所有键
{% for foo in user_info.values %}
<p>{{ foo }}</p>
# valuse 获取所有值
{% endfor %}
{% for foo in user_info.items %}
<p>{{ foo }}</p>
# items 获取所有键值对
{% endfor %}
</body>
</html>
三.自定义过滤器标签
1.需要在应用层创建一个templatetags文件夹
2.在该文件夹内创建一个py文件 任意名
3.该py文件内需要编写 固定代码
from django import template
register = template.Library()
4.自定义过滤器语法只能接受两个参数
{{}} # 语法
@register.filter(is_safe=True)
def index(a,b):
return a+b
# 在返回的html内编写
{% load tme%} #tme是templatetags 文件夹内你创建的py文件名
{{ n1|index:333}} #n1=111 结果444
5.自定义标签接收任意参数
{% %} # 标签
@register.simple_tag(name='my_tag') # name=起别名
def func(a,b,c,d):
return a+b+c+d
# 在返回的html内编写
{% load tme%} #tme是templatetags 文件夹内你创建的py文件名
{% my_tag 1 2 3 4 %} # 10 # 参数空格隔开
6.自定义inclusion_tag
@register.inclusion_tag('01.html')
def inner(n): # 2.接收
l1 = []
for i in range(1, n+1): # 3.参数+1循环
l1.append(f'第{i}行') # 4.添加l1
return locals() # 5.这里容易出现缩进问题看清楚接收至01.html
# 01.html内
<ul>
{% for eng in l1 %} # 6.循环l1
<li>{{ eng }}</li> # 7.结果为 第{i}行 通过inner传入参数
{% endfor %}
</ul>
# home层 对应展示层
{% load tem %}
{% inner 10 %} # 1.传值给inner函数
'先作用与一个局部的html页面 之后将渲染结果放到调用位置'