zoukankan      html  css  js  c++  java
  • 18)django-模板的过滤器和tag,自定义simple_tag和filter

    模板过滤器是在变量被显示前修改它的值的一个简单方法。 过滤器使用管道字符 .

    模板标签(template tag) 。标签(tag)定义比较明确,即: 仅通知模板系统完成某些工作的标签。 

    一:django自带过滤器

      

    {{ name|lower }} 显示的内容是变量 {{ name }} 被过滤器 lower 处理后的结果,它功能是转换文本为小写
    {{ my_list
    |first|upper }} {{ bio|truncatewords:"30" }} addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。 这在处理包含JavaScript的文本时是非常有用的。 date : 按指定的格式字符串参数格式化 date 或者 datetime 对象, 范例: {{ pub_date|date:"F j, Y" }} length : 返回变量的长度。 对于列表,这个参数将返回列表元素的个数。 对于字符串,这个参数将返回字 符串中字符的个数。 你可以对列表或者字符串,或者任何知道怎么测定长度的Python 对象使用这个方法 (也就是说,有 __len__() 方法的对象)。

    二:模板标签(template tag)

      标签(tag):定义比较明确,即: 仅通知模板系统完成某些工作的标签 ,比如

      for标签

      if 标签

    三:自定义simple_tag

      如果django自带的过滤器和tag不满足需求,可以自己定义simple_tag和filter来使用

      把ptyhon某些函数直接那到模板语言使用,就模板的simple_tag

       建立步骤如下:

        步骤1)
            在某个app下面创建templatetags目录
        步骤2)在templatetags下面创建任意xx.py文件
    
        步骤3)创建template对象register,
        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
    
        步骤4)装饰自定义文件
    
        步骤5)setings里面注册app
        步骤6)在模板里顶部{% load xx%}
        步骤7)使用{% 函数名 参数%}
    
        优点:参数任意
        缺点:不能做为if条件

    四:自定义filter(过滤器)

    模板自定义filter
        
        步骤1)
            在某个app下面创建templatetags目录
        步骤2)在templatetags下面创建任意xx.py文件
    
        步骤3)创建template对象register,
        from django import template
        from django.utils.safestring import mark_safe
           
        register = template.Library()
           
        @register.filter
        def hello(v1,v2): 
            return  v1 + v2
    
        步骤4)装饰自定义文件
    
        步骤5)setings里面注册app
        步骤6)在模板里顶部{% load xx%}
        步骤7)使用{{ 参数1|函数名:参数2}} 最多传递两个参数
            {{ "word"|hello:"china" }}
    
    
            最多传递两个参数,如果要传递多个参数,可以这样写
            {{ 参数1|函数名:“参数2,参数2”}}
            在函数里split切割
    
        缺点:参数最多两个,不能加空格
        优点:能作为if条件

    五:示例

      app01.templatetags

      xx.py

        # -*- coding:utf-8 -*-
        __author__ = 'shisanjun'
        from django import template
        
        register=template.Library()
        
        @register.simple_tag
        def add(n,m): #自定义simple_tag,可以传递多个参数
            return n+m
        
        @register.filter
        def hello(n,m): #自定义filter,只能传递两个参数
            return n+m

      模板调用 

        {% load xx %}
        <!DOCTYPE html>
        <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
            <p>simple_tag演示</p>
            {% add 2 3 %}
              <p>filter演示,filter最多传递两个参数</p>
            {{ "word"|hello:"china" }}
            <p>simple_tag不能使用if判断,filter可以用于if判断测试条件</p>
            {%if "word"|hello:"china" %}
            {% endif %}
        
        </body>
        </html>

  • 相关阅读:
    网格模型和X文件使用面面观(转)
    3D中的OBJ文件格式详解(转载)
    机器学习随笔01
    WinForm ListControl MouseWheel Envent
    如何判断一个元素在亿级数据中是否存在? 很难吗...
    windows 虚拟机VMware 安装linux系统注意事项!!!
    windows phpinfo上不能找到memcache扩展 php版本5.6
    php 判断两个时间段是否有交集
    tp5.0 根据经纬度 获取附近信息
    php 前台生成多维数组 后台批量添加
  • 原文地址:https://www.cnblogs.com/lixiang1013/p/7788926.html
Copyright © 2011-2022 走看看