过滤器自定义代码布局(自定义的代码,放的位置)
1.某个app特有的自定义代码块
-app目录下,创建一个 templatetags文件夹
-在templatetags创建python模块加__init__文件
2.共用的代码块
-创建一个新的app,将他们定义在新的app中,在INSTALL_apps中注册
然后就可以应用了
自定义过滤器(过滤器 html界面获取chontext参数时对参数进行的操作{{lt|slice:'::-1'}} |调用 :传参数 )
过滤器是什么 :就是一个函数
函数(第一个参数,必须是传递进来的模板变量,第二个随意)
定义
非常简单 就是写一个函数(满足条件的)
注册一下
第一个方法
1 通过 django.temple.Library 的实例的filter方法
2 filter有两个参数:
name过滤器的名字 str类型 不写默认为函数名
filter_func定义的过滤器的函数
register.filter(to_male)#函数不带括号 #register是Library的实例化
第二个方法用装饰器的方法 在定义函数前加 @register.filter()
from django.template import Library register = Library() #变量名随意 @register.filter() #@register.filter(name='')可以通过关键字传参数 def to_male(value,arg='zh'): map= { 'zh':('女','男'), 'en':('female','male'), } return map[arg][value] # register.filter(to_male)
模板中使用
先load 通过python的模块名
如果出现了以下报错
'customer_filters' is not a registered tag library. Must be one of: admin_list admin_modify admin_static admin_urls cache i18n l10n log static staticfiles tz
settings文件中的INSTALLD_APPS内必须含有该app。需要确认settings文件中的INSTALLED_APPS变量中已经有了appname
自定义模板标签(模板标签是干什么用的?-html中可以用的函数 {%name 参数 %} 空格传参数)
简单标签
django.template.Library.simple_tag()
创建简单标签
例子:输出当前时间的标签(跟过滤器很像)
注册
1调用函数
2. 装饰器
from datetime import datetime from django.template import Library register =Library() @register.simple_tag() #注册方法2 def curren_time(foramt_str='%Y-%m-%d %H:%S'): return datetime.now().strftime(foramt_str) # register.simple_tag(curren_time) #注册方法1
应用上下文变量(views中render传递到模板中的那个context)
只需要在simple_tag中,设置参数take_contex=True
并且标签中的函数的第一个函数必须为context
包含标签({% include '' %}通过渲染一个模板来展示数据)
定义一个函数接收调用时传递的模板变量
django.template.Library.inclusion_tag()
定义一个模板
@register.inclusion_tag('video/show_list_as_ul.html) def show_list_as_ul(value): return {'ls':value} #######################################################
video/show_list_as_ul.html文件内容 <ul> {% for l in ls %} <li>{{ l }}</li> {% endfor %} </ul>
包涵标签 :简单标签的结果通过html的渲染在输出
调用时传达位置参数和关键字参数都可以用空格区分