dtl模板语言,自定义filter和tag
1,变量在视图函数中通过 return render(request,‘.html’,{'num':num})传入 可以直接引入local()
在前端通过.与法进行访问 可以将全部类型传入,包括函数返回值,类的__str__,函数不带参数
2.dtl模板语言的filter和tag:
常用的filter |add:2 |default:0 |data:'Y-m-d' <a>{{ name|truncatechars:0 }}</a> <a>{{ dict1.usr|slice:'0:1'}}</a> -- 注:过滤器可以串联操作,可以拥有0个或1个参数
-- 增加 add:num
-- 字符串长度 length
-- 默认值 default:'默认值' # 变量不存在或为空
-- 全大写 upper
-- 全小写 lower
-- 切片 slice:'0:-1'
-- 将数字转换为文件大小 filesizeformat
-- 字符串隐藏 truncatechars:13 # 只显示10个字符,后置字符都用...来替代
-- 时间 date:'Y-m-d'
-- 转换原意 safe
tag 可用于反向解析 用于{%now:'Y-m-d' 'h-i-s'%} 起别名{% with ‘hshs' as nu’%} {%end with%} -- Django CSRF认证 {% csrf_token %}
if 和 for 用法
`python
'''
语法:
{% if 条件1 %}
结论1
{% elif 条件2 %}
结论2
{% else %}
结论n
{% endif %}
注:
1. if的条件可以添加filter
2. 可以嵌套
'''
```
## 七、迭代器
```python
'''
{% for foo in iterate %}
{{ forloop }}
{% empty %}
可迭代对象为空
{% endfor %}
注:
1. iterate为可迭代对象
2. iterate可以添加filter
3. forloop变量为存放迭代信息的字典,父级forloop字典,开始索引从0编号或1编号,倒序索引从0编号或1编号,是否是第一次或最后一次循环
4. empty分支会在可迭代对象不存在或空时执行
## 八、自定义过滤器与标签
```python
'''
步骤:
1. 在注册的app下创建templatetags包
2. 在模板中自定义模块py文件,如:owen_tags.py
3. 要在使用自定义filter与tag的模板页面中加载自定义模块py文件,案例:{% load owen_tags %}
4. 自定义filter语法
from django.template import Library
register = Library()
@register.filter(name='jump')
def owen_jump(value, arg):
try:
return value * int(arg)
except (ValueError, TypeError):
return ''
5. 自定义tag语法
@register.simple_tag(name='add_two')
def owen_add(arg1, arg2):
try:
return int(arg1) + int(arg2)
except (ValueError, TypeError):
try:
return arg1 + arg2
except Exception:
return ''