日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django框架基础知识05-自定义模板标签与过滤器

發布時間:2024/4/17 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django框架基础知识05-自定义模板标签与过滤器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

根據一定規則,自己定義出符合需求功能的.用在任何你有需求的地方,因為內置的滿足不了我們的需求,不同的東西有不同的定義規則

目前最最重要的就是HOW

一 文件路徑配置:

templates

存放自定義

某個app特有的自定義標簽:存放模板的目錄:在app目錄下創建一個python package,在其中新建templatetags標簽及過濾器的目錄

目錄結構:

?

注意:templatetags這個目錄名字是固定的,而里面的模塊名是自定義的.

模板過濾器的分析:

{{ var|foo:"bar" }} 變量,過濾器,參數

自定義過濾器就是一個帶有一個或兩個參數的Python 函數:

- (輸入的)變量的值 —— 不一定是字符串形式。

- 參數的值 —— 可以有一個初始值,或者完全不要這個參數。

自定義過濾器的例子:

?

?

def to_male(value,arg): #自定義返回判斷函數,用字典實現的例子
? map = {
? ? ? 'zh':('女','男'),
? ? ? 'en':('female','male')
? }
? return map[arg][value]

掌握自定義的規則!!!

注冊自定義過濾器:

django.template.Library.filter()

1.Library.filter()方法需要兩個參數:

a. name:過濾器的名稱(一個字符串對象)

b. filter_func:編譯的函數 – 一個Python函數(不要把函數名寫成字符串)

2.可以把register.filter()用作裝飾器;在register.filter(name=''),可以放參數.

3.沒有聲明 name 參數,Django將使用函數名作為過濾器的名字。

?

使用自定義過濾器:

在模板中使用自定義的過濾器

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

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

?

自定義標簽:

簡單標簽django.template.Library.simple_tag()

包含標簽django.template.Library.inclusion_tag()

tag()方法有兩個參數:

  • 模板標記的名稱 - 字符串。 如果省略,將使用編譯函數的名稱。

  • 編譯的函數 – 一個Python函數(不要把函數名寫成字符串)

  • 與過濾器注冊一樣,也可以將其用作裝飾器。

    自定義簡單標簽的例子:

    ?

    代碼布局(自定義的代碼,放在哪里)

    ?

    -app目錄下,templatetags文件夾.

    ?

    在simple_tags的參數中設置takes_context=True,就能得到views中的context傳參.在自定義標簽中的參數第一個一定要寫context.例:

    def func(context,format_str):

    ...

    包含標簽,通過渲染另外一個模板

    自定義包含標簽的例子:

    ?

    例子:

    @register.inclusion_tag('teacher/show_li_as_ul.html')
    def show_list_as_ul(value,style):
    ? ?return {'ls':value,'style':style}

    ?

    <td>{% show_list_as_ul stu.course 'link' %}</td>

    裝飾器中傳入的是我們顯示數據的模板文件路徑

    context中以下劃線開頭的健,屬性,方法用點號在模板中拿不到

    例:arg = {

    '_meta' = 'adafdakfl'

    }

    {{arg._meta}}取不到

    想要取值就先把arg傳到變量中,在變量里取出_meta,再用這個新變量取值.

    函數返回的是個字典對象.

    代碼布局(自定義的代碼,放在哪里)

  • 某個app特有的 -app 目錄下,templatetags 文件夾 -再到 templatetags 文件夾下創建python模塊(py文件)

  • 定義復用 -創建一個新的app,將他們定義在新的app中,在INSTALL_APPS 注冊,然后就可以應用

  • 1.自定義模板過濾器 -模板過濾器是什么 -函數,一個或兩個參數 - 第一個參數,是傳遞進來的模板變量 - 第二個參數,普通的參數,也可以是默認,也可以不要 其實就是個函數,沒有什么不同 - 定義非常簡單,就是寫一個函數

    -注冊
    1.
    通過django.template.Library 它的實例的 filter 方法
    filter 有兩個參數:
    - name 過濾器的名稱,是個字符串,可以不寫,默認
    使用方法名作為過濾器的名稱
    - filter_func 定義的過濾器的函數
    2.通過裝飾器
    -模板中使用
    - 先要load一下,通過python模塊名

    2.自定義模板標簽 - 簡單標簽 django.template.Library.simple_tag() - 創建 普通的python函數 - 注冊 1. 2.裝飾器 - 引用上下文變量(views中render傳遞到模板中的那個context) 只需要在simple_tag 中,設置參數take_context=True 自定義的標簽函數的第一個參數一定是 context

    - 包含標簽

    ? ?

    轉載于:https://www.cnblogs.com/winfun/p/10966512.html

    總結

    以上是生活随笔為你收集整理的Django框架基础知识05-自定义模板标签与过滤器的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。