A-3-1-1 自定义过滤器标签

过滤器自定义代码布局(自定义的代码,放的位置)

  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

 应用上下文变量(viewsrender传递到模板中的那个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的渲染在输出

调用时传达位置参数和关键字参数都可以用空格区分

猜你喜欢

转载自www.cnblogs.com/zy0307/p/10540010.html