1. 程式人生 > >18)django-模板的過濾器和tag,自定義simple_tag和filter

18)django-模板的過濾器和tag,自定義simple_tag和filter

hello 直接 結果 from simple 使用 span 裝飾 san

模板過濾器是在變量被顯示前修改它的值的一個簡單方法。 過濾器使用管道字符 .

模板標簽(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>

技術分享

技術分享

技術分享

18)django-模板的過濾器和tag,自定義simple_tag和filter