自定义过滤器及标签

时间:2022-12-10 21:44:07

前面我们学习了模板过滤器,还有模板标签,使用的都是开发者提供的,如果我们有不同的需求,其实可以自己来定义的,今天我们就来看看如何使用自定义的过滤器及标签。

  • 自定义过滤器标签代码布局
  • 自定义过滤器及注册
  • 自定义简单标签
  • 自定义包含标签

 

自定义过滤器标签代码布局

 

  代码布局是:自定义过滤器标签放的地方

  地点一: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 %}

 

 


 

基础的知识到这里就结束了,下章就是系统的啦!