django自定义过滤器和标签

本文介绍了在Django中创建自定义过滤器和标签的步骤,包括新建包含templatetags的文件夹,创建python文件如common_extra.py,并将其父目录添加到settings.py的APPS配置中,以便于模板系统识别和使用。
摘要由CSDN通过智能技术生成
自定义过滤器和标签都写在python文件中(.py),所以先新建一个文件夹名字自己取,在这个文件夹下再新建一个文件夹,名字一般写作templatetags,写这个名字,是为了方便与系统连接,最后在templatetags下新建一个python文件, 取个名字,这里叫common_extra.py,然后将新建的最外层那个文件夹名注册到settings.py中的APPS里面
过滤器和标签一般在模版中写的,所以先准备一个模版和一些数据

新建一个模版,取个名字,这里叫test2.html

views.py中

context(上下文)中的数据是传给test2.html模版的

def func(request):
return render(request,'test/test2.html', context={


    'name':'liping',
    'age':20,
    'list':[1,3,11,20,30,33,0,0.9],
    'time_format':'%Y %m %d %H:%M:%S',
    'showList':['android', 'ios', 'java', 'ai', 'python'],


})

test2.html中

在最上面导入自定义的文件名
{% load common_extra %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义标签和过滤器</title>
</head>
<body>

自定义的排序过滤器
{{ list|my_sort }} <br>
自定义的转大写过滤器
{{ name|myUpper }} <br>
自定义的替换字符串字符过滤器
{{ name|myReplace:'i' }} <br>

<br>

自定义获取当前时间标签
{% current_time %}

<br>

自定义获取当前时间标签 传参数
{% current_time2 '%Y %m %d %H:%M:%S' %}

<br>

自定义的一个简单加法过滤器
{% add 10 100 %}

<br>

自定义的一个获取当前时间,使用上下文数据的过滤器
{% current_time3 %}

<br>

自定义包含标签 使用showTest.html模版
{% showHtml %}

<br>

自定义包含标签 使用showTest.html模版 传参数
{% showHtml2 'android' %}

<br>

自定义包含标签 使用showTest.html模版 使用上下文数据
{% showHtml3 %}


</body>
</html>

common_extra.py文件中

导入template包
from django import template
获取Library对象
register = template.Library()


# 自定义过滤器

自定义的排序
@register.filter
def my_sort(value):
    a = sorted(value)
    return a

自定义的转大写
@register.filter('myUpper')
def myUp(value):
    return value.upper() + '  自定义'


自定义的替换字符
@register.filter
def myReplace(value, arg):
    return value.replace(arg, 'k')




# 自定义简单标签

导入时间包
import datetime

自定义不带参数简单标签
@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_time2(timeFormat):

    return datetime.datetime.now().strftime(timeFormat)



@register.simple_tag
def add(a, b):
    c = a + b
    return c


使用上下文数据    
@register.simple_tag(takes_context=True)#允许使用上下文
def current_time3(context):#这个参数名必须是context
    format = context.get('time_format')
    return datetime.datetime.now().strftime(format)



# 自定义包含标签
包含标签,就是在一个模块中要展示的一个东西,用另一个模块渲染出来

# 不含参数
@register.inclusion_tag('test/showTest.html')
def showHtml():
    arr = ['java', 'ios', 'python', 'web', 'php', 'c']
    
    return {'array':arr}


#包含参数
@register.inclusion_tag('test/showTest.html')
def showHtml2(arr):

    return {'array':arr}


# 使用上下文中的数据
@register.inclusion_tag('test/showTest.html', takes_context=True)
def showHtml3(context):
    list = context.get('showList')
    return {'array':list}

showTest.html中

{% for i in array %}

    <button>{{ i }}</button><br>

{% endfor %}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值