Django框架中的自定义过滤器和标签

1.文件路径配置

存放自定义标签及过滤器的目录是templatetags(必须是这个,因为底层源码里面是有对应的文件去引用的),还是建立在项目中的文件夹内,具体目录如下:
Step 1:在项目目录下,创建个名为common的python包。
在这里插入图片描述
Step 2:将common加入到settings文件中的INSTALLED_APP列表中;
在这里插入图片描述
Step 3:在common里面创建目录templatetags,在目录中创建自定义过滤器和标签文件。

2.自定义过滤器

2.1 注册自定义过滤器

django.template.Library.fliter()

  1. 没有参数的例子,有两种注册方式,一种是直接调用函数,另一种是装饰器,首先在新建立的common_extras.py写入自定义过滤器函数:
from django import template
register = template.Library() # 生成注册器(register不能更改,不然底层源码没办法识别)

def my_upper(value):  # value自动接收模板变量
    return value.upper()

register.filter(my_upper) # 注册方法一
@register.filter('ms')  #注册方法2
def my_sort(value):
    value.sort()
    return value

其中在注册方法二中可以将函数名替换,在本例子中将函数my_sort替换为ms,然后在自己的网页中调用自定义过滤器如下:

{{ course_name|upper }} {# 内置过滤器 #}
{{ course_name|my_upper }} {# 自定义过滤器 #}
{{ li }} <br>
{#{{ li|my_sort }} <br>#}
{{ li|ms }}
  1. 带参数的例子
    在新建立的common_extras.py写入自定义过滤器函数,然后调用自定义的过滤器函数。
@register.filter
def test(value,x):
    return value.split(x)

# 传递多个参数
@register.filter
def my_test(value,x):
    li = x.split(',')
    return value.replace(li[0],li[1])
{{ course_name|test:' '}} <br>
{{ course_name }} <br>
{{ course_name|my_test:' ,-' }}在这里插入代码片

2.2 自定义标签

2.2.1自定义简单标签

有两种方式,一种定好格式,另一种是用户自定义格式。

@register.simple_tag
def current_time():
    format_string = '%Y年%m月%d日 %H:%M:%S'
    return datetime.datetime.now().strftime(format_string)

@register.simple_tag #用户调用时候自己给格式
def current_time1(format_string):
    return datetime.datetime.now().strftime(format_string)
    
@register.simple_tag(takes_context=True) #启用上下文参数
def current_time2(context):
    fs = context.get('format_string')
    return datetime.datetime.now().strftime(fs)

然后在自己的网页中调用自定义标签如下,过滤器是用|,标签是空格:

{% current_time %}
{% current_time1 '%Y年%m月%d日 %H:%M:%S' %}
{% current_time2 %}

2.2.2 自定义包含标签

现在templates中的文件夹中新建一个html文件

<ul>
    {% for i in chioces %}
        <li>{{ i }}</li>
    {% endfor %}
</ul>

注意键值对需要对应上,chioces需要对应上。

def show_res():
    li = ['星期一','星期二','星期三','星期四']
    return {'chioces':li}

@register.inclusion_tag('book1/show_tag.html')
def show_res1(li):
    return {'chioces':li}

@register.inclusion_tag('book1/show_tag.html',takes_context=True)
def show_res2(context):
    li = context.get('li')
    return {'chioces':li}

然后在自己的网页中调用自定义标签如下:

{% show_res %}
{% show_res1 li %}
{% show_res2 %}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kiwi.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值