django自定义模板过滤器和模板标签

一、创建存放目录,也可放在app中

①在项目目录下创建common的python包
②再在common包目录下创建templatetags包,其中templatetags这个命名是固定的
这个目录可存放自定义的过滤器及标签,目录如下图所示:
在这里插入图片描述
③注册common这个包,在settings.py中:

INSTALLED_APPS = [
	'common',
]

二、自定义模板过滤器

①在templatetags目录下,创建my_filters.py文件
②在my_filters.py中添加如下代码

from django import template

# register名称固定
register = template.Library()


@register.filter    # @register.filter():括号中可指定过滤器名称
def my_lower(value):
    return value.lower()

@register.filter    # 针对有参数的过滤器
def my_cut(value, arg):
    return value.replace(arg, '')

③在student app目录下的views.py中创建视图函数test
在这里插入图片描述
④在student app目录下的urls.py中设置如下路由

from django.urls import path
from . import views

app_name = 'student'
urlpatterns = [
	path('test/', views.test, name='test'),
]

⑤创建模板test.html,注意要先load my_filters这个自定义的py文件
在这里插入图片描述

⑥访问查看效果,如下图所示,跟自带的效果是一致的!!!也可以根据需求创建不同功能的过滤器
在这里插入图片描述

三、自定义模板标签

在templatetags目录下创建一个my_tags.py的文件用来存放

  • 自定义简单标签
from django import template
from datetime import datetime

register = template.Library()

@register.simple_tag
def current_time1():	# 不用传参,可直接用
    format_string = '%Y年%m月%d月 %H:%M:%S'
    return datetime.now().strftime(format_string)

@register.simple_tag    # 针对传参的模板
def current_time2(format_string):
    return datetime.now().strftime(format_string)

@register.simple_tag(takes_context=True)    # 从上下文中获取参数
def current_time3(context):		#context名称固定
    format_string = context.get('format_string')
    return datetime.now().strftime(format_string)

针对第三种从上下文中获取参数,那么在对应的视图函数中就得添加这个参数
在这里插入图片描述
在模板中引用模板标签,需先load my_tags
在这里插入图片描述
效果如下图所示,三个效果都是一样的:
在这里插入图片描述

  • 自定义包含标签
    ①当我们很多模板中需要用到一些类似的逻辑功能时,就可以用包含标签进行封装
    先创建模板用来存放功能代码,在student/show_tags.html
    在这里插入图片描述
    ②在my_tags.py中添加如下代码
# 添加创建好的模板文件
@register.inclusion_tag('student/show_tags.html')
def show_list1():
    menu = ['python', 'java', 'c++']
    return {'choices': menu}

@register.inclusion_tag('student/show_tags.html')
def show_list2(menu):
    return {'choices': menu}

@register.inclusion_tag('student/show_tags.html', takes_context=True)
def show_list3(context):
    menu = context.get('menu')
    return {'choices': menu}

③针对上下文中获取参数传值
在这里插入图片描述
④在test.html中添加如下代码:

{% load my_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
    {% show_list1 %}
    <hr>
    {% show_list2 menu %}
    <hr>
    {% show_list3 %}
</body>
</html>

⑤查看结果
在这里插入图片描述
只需知道基本使用即可,一般用不到!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值