Django自定义过滤器和自定义标签

自定义过滤器

  1、确认app已在setting中进行注册;

  2、在app模板下创建名为templatetags的模板(切记名字一定不能改,只能是templatetags);

  3、在模板下创建任意名称的.py文件;

  4、在刚刚创建的.py文件中定制过滤器

  -具体语法 

from django.template import Library
register = Library()


@register.filter(name='rule')
# 最多包含两个参数
def rule(value, before): # 将before替换为~ return value.replace(before, '~')

  

  5、编辑视图函数时,将value传递给模板文件

def index(request):
    return render(request, 'one.html', {'value':'Hello, dandan!'})

  6、在模板页面中使用自定义过滤器

<p style="color: red">
    <b>
        {% load my_tag %}
        {{ value|rule:'!' }}
    </b>
</p>

  

自定义标签

  自定义标签跟自定义过滤器的步骤一样,只是定义的形式有点不一样(自定义标签,返回当前格式化时间)

# extra_tags.py
# 自定义标签,格式化返回当前时间

@register.tag(name='current_time')
# 解析器
def do_current_time(parse, token):  # parse解析器对象,token被解析的对象,包含标签的名字和格式化的格式
    try:
        tag_name, format_string = token.split_contents()
    except:
        raise template.TemplateSyntaxError('syntax')
    return CurrentNode(format_string[1:-1])  # 传入模板中的节点类

import datetime
class CurrentNode(template.Node):
    def __init__(self, format):
        self.format_string = str(format)

    # 把当前时间格式化后返回
    def render(self, context):
        now = datetime.datetime.now()
        return now.strftime(self.format_string)

  在模板中使用

{% current_time "%Y-%m-%d %H:%M:%S" %}
原文地址:https://www.cnblogs.com/knowledgeYang/p/10252192.html