zoukankan      html  css  js  c++  java
  • 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}
  • 相关阅读:
    Android学习进程 Java引用 Rxjava MVP
    小试 Xcode 逆向:App 内存监控原理初探
    春招路上孤独的iOSer的心路历程(面经)
    【译】4个你需要知道的Asset Catalog的秘密
    超全!iOS 面试题汇总
    整理 iOS 9 适配中出现的坑(图文)
    旧版Xcode下载地址
    xcode 自动添加注释,生成文档
    NDK_ROOT找不到的解决方法 MACOS
    13个小技巧帮你征服Xcode
  • 原文地址:https://www.cnblogs.com/xuchengcheng1215/p/9359481.html
Copyright © 2011-2022 走看看