前面我们学习了模板过滤器,还有模板标签,使用的都是开发者提供的,如果我们有不同的需求,其实可以自己来定义的,今天我们就来看看如何使用自定义的过滤器及标签。
- 自定义过滤器标签代码布局
- 自定义过滤器及注册
- 自定义简单标签
- 自定义包含标签
自定义过滤器标签代码布局
代码布局是:自定义过滤器标签放的地方
地点一:APP特有的
在APP下创建templatetags文件夹,在文件夹中放Python文件(py文件)
地点二:复用的
新建一个APP,在新的APP中创建templatetags文件夹,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 %}
基础的知识到这里就结束了,下章就是系统的啦!