zoukankan      html  css  js  c++  java
  • django-DIL模板自定义过滤器,自定义标签,自定义包含标签

    • 自定义过滤器
      • DTL模板语言生来只是为了方便的展示信息,所以与编程语言相比显得有点薄弱,有时候不能满足我们的需求。因此django提供了一个接口,让开发者能自定义标签和过滤器。
      • 首先,你需要添加一个templatetags的文件夹, 自定义过滤器必须处在已经安装了的app中的一个名叫”templatetags”的包(文件夹)中。因此可以有两种选择:
        • 一种是放在其他已经安装了的app中。这种方式简单,但不方便管理。
        • 单独创建一个app,用来存放所有的自己定义的过滤器。 推荐使用
      • ps: templatetags 文件夹名字不能修改,这是django固定死的

    1.使用上述第二种创建公用的app utils       ------      工具,在utils app下创建templatetags包固定名称,  ps:不要丢失 __init__.py  否则模板中加载不到

    在templatetags下创建xxx.py文件,编写过滤器

    2.py文件中   utils.templatetags.xxx.py 

    # coding=utf-8
    from django import template
    
    # 代表该文件是自定义标签名 register固定写法
    register = template.Library()
    
    # html模板中调用{{ msg|myCut:'args' }}  需要导入该py文件   {% load py_file_name %}
    @register.filter  # 过滤器装饰器
    def myCut(value, args):
        # 根据需求编写代码
        return u'自定义过滤器某些字符返回小写: %s' % (value.replace(args, '').lower())  # python2默认ascill码 u'中文'  unicode, pyhon3默认unicode

    3.***需要在settings文件中导入该app  utils

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'utils', # 创建自定义过滤器需要引入该app
    ]

     自定义标签:

    引用上述第二步pyfile:

    @register.simple_tag
    def current_time(time_geshi):  #html模板中调用 {% current_time '%Y-%m-%d %}
        return datetime.now().strftime(time_geshi)

    自定义包含标签

    应用场景:重复出现在html页面中的动态数据,而其他页面需要include 这个页面,会引用一次,需要在view中传值一次。

    而将数据定义在包含标签,通过装饰器@register.inclusion_tag("my_menu11.html") 指定一个页面接收该数据,其他所有页面都可以通过 定义的{% my_menu %}去调用,类似 {% include "my_menu11.html"%}的效果.    ps需要先加载该包含标签Py文件 {% load pyfilename %}

    引用上述第二步pyfile:

    @register.inclusion_tag("my_menu.html") #将返回值传给my_menu.html渲染 在将my_menu11.html引用给目标html。  ps:在目标html中使用 {% my_menu %}引用
    def my_menu():   # 不加参数                   # 类似在目标html使用{% include my_menu.html %}
        menu = {'a', 11, 'name': 'xiaom', 'age': 18}return {'menu': menu}

     my_menu11.html

    {% for m,v in menu.items %}
        {{ m }}: {{ v }}
    {% endfor %}

     渲染的目标html中使用 {% my_menu %}引用

    {% load custom %}    加载自定义包含标签py文件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
    自定义包含标签<br>{% my_menu %}<br>
    </body>
    </html>
  • 相关阅读:
    【SPOJ】6779 Can you answer these queries VII
    【SPOJ】1557 Can you answer these queries II
    【SPOJ】2916 Can you answer these queries V
    【CodeForces】86D Powerful array
    【SPOJ】1043 Can you answer these queries I
    【HDU】3727 Jewel
    【HDU】3915 Game
    【SPOJ】1043 Can you answer these queries III
    【SPOJ】2713 Can you answer these queries IV
    成为一名更好的软件工程师的简单方法
  • 原文地址:https://www.cnblogs.com/tangpg/p/9007572.html
Copyright © 2011-2022 走看看