一,自定义过滤器
1,确定app是否在setting中注册
2 在app下创建一个templatetags的文件夹(模块)(****名字不能变***)
3 在模块下创建一个py文件,名字随意:mytag.py
4 # 第一步(在templatetags文件夹中),导入template
from django.template import Library
# 第二步,定义一个叫register的变量=template.Library()
register = Library()
5 写一个函数(在templatetags文件夹中),用@register.filter(name='yyy')装饰一下(可以指定别名)
def str_add(str1, str2): #一定要有返回值
# 业务逻辑很复杂
return str1 + str2
6 在模板里:(新定定义的标签,过滤器,都要重启程序)
-{% load mytag %}
-{{'lqz'|str_add:'nb'}}
二,自定义标签
1,确定app是否在setting中注册
2 在app下创建一个templatetags的文件夹(模块)(****名字不能变***)
3 在模块下创建一个py文件,名字随意:mytag.py
4 # 第一步(在templatetags文件夹中),导入template
from django.template import Library
# 第二步,定义一个叫register的变量=template.Library()
register = Library()
5 只是装饰器不一样,(在templatetags文件夹中)
@register.simple_tag()
def add_nb(value):
return value+'nb'
6 在模板里:(多个参数,以空格区分)
-{% load mytag %}
-{% add_nb 'lqz'%}
三,inclusion_tag
1 inclusion_tag
为了生成html的片段(动态,传参数,传数据)2,步骤:
-app下新建一个模块,templatetags
-创建一个py文件(mytag.py)
-from django.template import Library
-register=Library() ----->register名字一定不能变
-写装饰器(inclusion_tag)
-@inclusion_tag('模板路径',name='重命名')
-def my_in(): (不写可以,写多个也可以,在使用的时候用空格来传参)
- 一堆逻辑处理,查数据库
- ret=Book.object.all()
return {'books':ret}
-在模板中:
可以用books这个变量(在模板中引用的是books这个变量代表的是返回的这个列表),渲染页面
-应用:
-在另一个模板中:
-{%load mytag.py%}
-{% my_in %}