1. 程式人生 > >Django 學習第五天——自定義過濾器及標簽

Django 學習第五天——自定義過濾器及標簽

引用 變量 自定義模板 標簽 模板 展示 學習第五天 clu 使用方法

代碼布局:(自定義的代碼放在哪?)

  1、創建某個 app 特有的:

    在 app 目錄下,創建 templatetags python包(文件夾);

    再到 templatetags 文件夾下創建python模塊(文件)

    註意:templatetags 這個名字固定的,裏面的模塊名是自定義的

  2、創建復用(公用)的:

    創建一個新的app,將他們定義在新的app中,在主目錄的setting.py文件裏的 INSTALL_APPS 註冊,然後就可以應用

技術分享圖片

一、自定義模板過濾器

  創建:

    模板過濾器就是一個函數:

    一般有一個或或兩個參數

      第一個參數,一般是傳遞進來的模板變量;

      第二個參數,普通的參數,也可以十默認,也可以不要;

    定義就是寫一個函數

  註冊:

    1、通過 django.template.Library 它的實例(一定要是:register)的 filter 方法

    filter 有兩個參數:

      1)、name:過濾器的名稱,是個字符串,可以不寫,默認使用方法名作為過濾器的名稱;

      2)、filter_func: 定義的過濾器的函數(函數對象);註意不要把函數名寫成字符串

register.filter(別名,自定義的函數名)

    2、通過裝飾器:

@register.filter #這裏可以傳入 @register.filter(name=‘newname‘) 取別名

技術分享圖片

    使用:

      需要使用{% load %}標簽將我們的自定義模塊加載進來

      {% load %} 聲明將會載入給定模塊名中的標簽/過濾器

二、自定義模板標簽:

  自定義簡單標簽:

    創建:

      就是一個普通的python函數

    註冊:

      1、通過 django.template.Library 它的實例(一定要是:register)的 simple_tag 方法

        simple_tag 有兩個參數:

          1)、name:過濾器的名稱,是個字符串,可以不寫,默認使用方法名作為過濾器的名稱;

          2)、filter_func: 定義的過濾器的函數,(函數對象)

register.simple_tag(name=別名,自定義的函數名)

  2、通過裝飾器:

@register.simple_tag #這裏也可以傳入 @register.simple_tag(name=‘newname‘) 取別名

    

    使用:

      需要使用{% load %}標簽將我們的自定義模塊加載進來

      {% load %} 聲明將會載入給定模塊名中的標簽/過濾器

  引用上下文變量:(views 中render傳遞到模板中的那個 context)

    只需要在 simple_tag 中設置 take_context=True

    自定義標簽函數的第一個參數一定是 context

技術分享圖片

  包含標簽:(inclusion tags)

    通過渲染另一個模板來展示數據

  定義:

    定義一個函數,接收調用時傳遞的模板變量

    定義一個模板,供這個函數使用

  註冊:

    1、通過 django.template.Library 它的實例(一定要是:register)的 inclusion_tag 方法

      inclusion_tag 有兩個參數:

        1)、name:過濾器的名稱,是個字符串,可以不寫,默認使用方法名作為過濾器的名稱;

        2)、filter_func: 定義的過濾器的函數,(函數對象)

register.inclusion_tag(自定義的函數名) #傳入定義的那個供函數使用的模板

    2、通過裝飾器:

@register.inclusion_tag(自定義的那個模板文件)

    使用:

      需要使用{% load %}標簽將我們的自定義模塊加載進來

      {% load %} 聲明將會載入給定模塊名中的標簽/過濾器

  引用上下文變量:(views 中render傳遞到模板中的那個 context)

    只需要在 inclusion_tag 中設置 take_context=True

    自定義標簽函數的第一個參數一定是 context

Django 學習第五天——自定義過濾器及標簽