前面我们学习了模板过滤器,还有模板标签,使用的都是开发者提供的,如果我们有不同的需求,其实可以自己来定义的,今天我们就来看看如何使用自定义的过滤器及标签。
- 自定义过滤器标签代码布局
- 自定义过滤器及注册
- 自定义简单标签
- 自定义包含标签
自定义过滤器标签代码布局
代码布局是:自定义过滤器标签放的地方
地点一:APP特有的
templatetags文件夹,在文件夹中放Python文件(py文件)
地点二:复用的
APP要在INSTALL_APP中注册,然后就可以应用了。
自定义过滤器及注册
在templatetags下py文件中,去写我们自定义的过滤器。
模板过滤器是什么?
函数。有一个或者两个参数,第一个参数为传递进来的模板变量,第二个参数可能是默认的,可能是普通的,也可以不要。
注册
way1
通过django.templates.Library它的实例filter方法
from django.template import Library
register=Library()
def name(bianliang) 自定义的过滤器
xxxxxx
return xxx
register.filter(name) 注册
filter的参数有两个:1、过滤器名字,字符串形式,可写可不写,不写默认方法名作为过滤器名字。
2、定义的过滤器函数
使用
在模板中,最前面{% load pyname %} pyname就是我们写过滤器的py文件。
就可以使用了,{{ 变量 | name }} name为过滤器名字
way2
装饰器来注册自定义过滤器
from django.template import Library
register=Library()
@register.filter(name='xx') 注册 括号里也可以不写,那么名字为函数。
def name(bianliang) 自定义的过滤器
xxxxxx
return xxx
自定义简单标签simple_tag
自定义标签跟自定义过滤器差不多一样
eg:求现在时间的自定义标签
from django.template import Library
from datetime import datetime
register=Library()
def zdytime(format_str)
return datetime.now().strftime(format_str)
register.simple_tag(zdytime,name='atime') 有两个参数
另一种装饰器的方法
from django.template import Library
from datetime import datetime
register=Library()
@register.simple_tag(name='atime') 只有一个参数
def zdytime(format_str)
return datetime.now().strftime(format_str)
使用:
同样开头写{% load pyname %}
在合适位置{% atime %}即可
引用上下文变量(views中render传递到模板的那个context)
只需要在simple_tag中写take_context=True
函数的参数第一个必须是context
@register.simple_tag(name='atime',take_context=True)
def zdytime(context,format_str)
return datetime.now().strftime(format_str)
自定义包含标签inclusion_tag
通过渲染另一个模板来展示数据
定义一个函数,接受调用时传入的模板变量
定义一个模板,在templates下,可以设一个专门的文件夹放包含标签的模板
模板
{% for i in ls %}
<li>{{i}}<li>
{% endfor %}
@register.inclusion_tag('模板的路径')
def show(value):
return {'ls':value}
使用:
load导入
{% show liebiao %}