Django 05 自定义过滤器、自定义标签

Django 05 自定义过滤器、自定义标签

一、自定义过滤器

#1、在项目目录下创建一个python package包 取名为common(这个名字可以自定义)
#2、在common目录下创建一个templatetags包
#3、在项目settings里面installed_apps里面添加common
#4、在templatetags目录下创建一个py文件,名字自定义

  模板过滤器的分析

#5、注册自定义过滤器
from django import template #导入template

register = template.Library() #实例化template

  #过滤器cut的功能
@register.filter   #注册方法二,使用装饰器的方法,注册名就是函数名
def mycut(value,arg):
    return value.replace(arg,'')

register.filter('mycut',mycut) #注册注册方法一,前面一个是函数名,后面一个是注册名

  #小写化的功能
@register.filter  #方法2
def lower1(value):
    return value.lower()

register.filter('lower1',lower1) #方法2
#6、导入
{% load common_extras %} {# 需要先导入这个模块才能使用自定义过滤器 #}
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>自定义过滤器及标签</title>
</head>
<body>
过滤器:{{ test|cut:'i' }} <br>
自定义过滤器:{{ test|mycut:'i' }} <br>

过滤器:{{ test|lower }} <br>
自定义过滤器: {{ test|lower1 }} <br>
</body>
</html>

二、自定义标签

  简单标签的注册

from django import template #导入template

register = template.Library() #实例化template

import datetime
@register.simple_tag  #注册
def current_time1(): #编写自定义标签
    return datetime.datetime.now().strftime('%Y年%m月%d日 %H:%M:%S') #后面的strftime是自定义格式的意思

@register.simple_tag
def current_time2(format): #这种情况就可以在html里面赋值
    return datetime.datetime.now().strftime(format)

@register.simple_tag(takes_context=True) #这种方法就可以在视图函数里面的context里面赋值
def current_time3(context):
    format = context.get('format')
    return datetime.datetime.now().strftime(format)

  包含标签的注册

#包含标签的功能是可以通过渲染另外一个模板来显示一些数据
#例如很多地方都可能会用到下面这几行代码,除了choices这个变量不一样之外,其他的都是格式都一样的情况下,那么可以把这部分代码封装在一个包含标签里面
<ul>
    {% for i in choices %}
        <li>{{ i }}</li>
    {% endor %}
</ul>
#1、创建一个固定格式的html文件
#2、为这个文件创建一个标签show_tags.html
<ul>
{% for foo in choice %}
<li>{{ foo }}</li>
{% endfor %}

</ul>
#包含标签
@register.inclusion_tag('book/show_tags.html') #利用装饰器注册,页面来自show_tags.html
def show_results1(): #方式一,直接传
    ls = ['x','y','z']
    return {'choice':ls} #固定格式中的choice改为ls

@register.inclusion_tag('book/show_tags.html')
def show_results2(ls): #方式二:模板里面传变量
    return {'choice':ls}

@register.inclusion_tag('book/show_tags.html',takes_context=True) #必须要加上takes_context=True
def show_results3(context): #方式三:上下文中获取
    ls = context.get('ls')
    return {'choice':ls}
原文地址:https://www.cnblogs.com/xuchengcheng1215/p/9359481.html