zoukankan      html  css  js  c++  java
  • 自定义模板语言之simple_tag和自定义过滤器

    扩展你的模板系统

    一般是扩展模板的tag和filter两个功能。可以用来创建你自己的tag和filter功能库。

    创建模板库

    分为两步:
    1. 首先决定由模板库在哪一个注册的app下放置,你可以放在一个已有的app目录下,也可以新建一个专门管理模板库的app,比如python manage.py startapp myTemplateLibrary。推荐后者,因为可以方便将来的重用。
     
    2. 在app目录下创建templatetags子目录,并在里面创建两个文件,__init__.py,用来声明这是一个包,另一个是你的tag/filter定义文件。比如myNewLibrary.py,那么在模板文件中可以这样使用:{% load myNewLibrary %}
     
    在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名
    {% load xx %}
    自定义simple_tag
    在templatetags目录下的py文件中写:
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library()
    
    @register.simple_tag
    def my_simple_time(v1,v2,v3):
        return  v1 + v2 + v3
    

    在HTML中写:

    {% load xx %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {% my_simple_time 1 2 3%}
    
    </body>
    </html>
    

    自定义simple_tag的html中不能用于if条件作为判断,so引出了自定义过滤器函数

    自定义过滤器函数

    (最多俩个参数,html中可以有if条件语句)
    自定义的过滤器就是一个带1,2个参数的python函数,一个参数放变量值,一个用来放选项值,比如{{ var|remove:"bar" }}, var是变量值,"bar"是选项值。
    在templatetags目录下的py文件中写:
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from django import template
    from django.utils.safestring import mark_safe
    register = template.Library()
    
    @register.filter
    def detail3(value,arg):
        allcount, remainder = arg.split(',')
        allcount = int(allcount)
        remainder = int(remainder)
        if value%allcount == remainder:
            return True
        return False
    在HTML中写:
    {% load xx %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {{  23|detail4:"4,0" }}
    
    {% if  23|detail4:"4,0" %}
    <h1>123</h1>
    {% endif %}
    
    </body>
    </html>
    
  • 相关阅读:
    只需 4 步,手把手教你如何实现滤镜功能
    paip.提升用户体验---c++ qt自定义窗体(1)---标题栏的绘制
    socket网络编程的一些基础知识
    图像处理、模式识别、模式分类、机器视觉推荐图书
    数据挖掘、机器学习和模式识别关系与区别
    Qt4_VS10 程序打包发布
    Qt之多线程
    QT中.pro文件的写法
    高斯定理的证明
    《Linear Algebra and Its Applications》-chaper3-行列式-行列式初等变换
  • 原文地址:https://www.cnblogs.com/luxiaojun/p/5832950.html
Copyright © 2011-2022 走看看