zoukankan      html  css  js  c++  java
  • 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" %}
  • 相关阅读:
    Python之socket
    Python之创建low版的线程池
    Python之面向对象及相关
    Python之面向对象(进阶篇)
    Python之面向对象(初级篇)
    Python之线程与进程
    python中执行父类的构造方法
    python之反射
    记一次有趣的米筐经历~
    算法第四章作业
  • 原文地址:https://www.cnblogs.com/knowledgeYang/p/10252192.html
Copyright © 2011-2022 走看看