Django學習筆記之自定義過濾器及標籤

2021-08-22 02:46:51 字數 3575 閱讀 7040

在專案目錄下 建立個名為common的python包

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions', #

'django.contrib.messages',

'django.contrib.staticfiles',]

在common裡面建立目錄templatetages,在目錄裡面建立自定義過濾器及標籤檔案.

**注意:**templatetags這個目錄名字是固定的,而裡面的模組名是自定義的

在common_extras.py檔案中自定義cut和lower的過濾器功能

一.自定義過濾器

# cut 過濾器的功能

defmycut

(value,arg):

return value.replace(arg,'')

# 對mycut進行註冊

register.filter('mycut',mycut)

註冊自定義過濾器:

django.template

.library

.filter()

1.library.filter()方法需要兩個引數:

a. 過濾器的名稱(乙個字串物件)

b. 編譯的函式 – 乙個python函式(不要把函式名寫成字串)

2.可以把register.filter()用作裝飾器;

3.沒有宣告 name 引數,django將使用函式名作為過濾器的名字。

例子:

from django import template

register = template.library() #例項化

# 對mycut進行註冊

register.filter('mycut',mycut)

# 裝飾器 進行註冊

@register.filter

defmylower

(value):

return value.lower()

使用自定義過濾器:

#需要使用

標籤將我們的自定義模組載入進來

宣告將會載入給定模組名中的標籤/過濾器

#要寫在模板檔案第一行

二.自定義標籤1.簡單標籤django.template.library.******_tag()

2.包含標籤django.template.library.inclusion_tag()

tag()方法有兩個引數:

1. 模板標記的名稱 - 字串。 如果省略,將使用編譯函式的名稱。

2. 編譯的函式 – 乙個python函式(不要把函式名寫成字串)

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

自定義簡單標籤的例子:

1.定義乙個顯示當前時間的簡單標籤

@register.******_tag

defcurrent_time

():return datetime.datetime.now().strftime('%y年%m月%d日 %h:%m:%s')

2.簡單標籤,傳引數,,需傳入時間格式

# 簡單標籤 傳引數

@register.******_tag

defcurrent_time2

(format_string):

return datetime.datetime.now().strftime(format_string)

3.註冊標籤時使用takes_context 引數,則可以使用從上下文中傳入的引數.

# 從上下文中傳進來引數

@register.******_tag(takes_context=true)

defcurrent_time3

(context):

format_string = context.get('format_string')

return datetime.datetime.now().strftime(format_string)

3.模板中使用自定義的標籤

自定義包含標籤的例子:

1.包含標籤的功能是可以通過渲染另外乙個模板來顯示一些資料

#例如很多地方都可能會用到下面這幾行**,除了choices這個變數不一樣之外,其他的都是格式都一樣時,那麼我們就可以把這部分**封裝在乙個包含標籤中.

# music/show_tags.html

}li>

ul>

@register.inclusion_tag('music/show_tags.html')

defshow_result

(): ls = ['***','yyy','zzz']

return

2.包含標籤 模板裡面傳參

@register.inclusion_tag('music/show_tags.html')

defshow_result2

(choice):

# ls = ['***','yyy','zzz']

return

模板裡面傳參:
3.包含標籤 上下文傳參

@register.inclusion_tag('music/show_tags.html',takes_context=true)

defshow_result3

(context):

ls = context.get('ls')

return

檢視函式(通過上下文傳參的引數在這裡):

def

index5

(request):

return render(request, 'music/index5.html',

context=

)

學習筆記之自定義控制項

學習初衷 在工作實際開發過程中,原有的安卓控制項已不能滿足實際的功能需求,而且有些應用還需要一些獨特的展示效果,這時就需要自定義控制項來定製控制項去滿足我們的需求了。public class customview extends view public customview context cont...

django學習日誌之自定義使用者擴充套件

django 為我們提供了強大的使用者認證系統,並且提供了基於該系統的user模型,所以,很多時候,我們有必要對自己的user進行業務擴充套件,得到滿足我們自己業務需求的user。藉此,寫下自己的感悟。user內建屬性如下 username 使用者名稱,必需字段。30個字元或更少,包含 和 字元。f...

Django 之自定義頭部資訊

當我們使用 django 來搭建一套網頁系統,有時候我們會需要在網頁裡加入一些資訊,比如宣示版權之類的資訊,而如果在每乙個需要渲染的頁面都加上這些資訊,會比較麻煩。而在 django 裡有乙個中介軟體 middleware 可以幫助我們實現這個功能而不需要在每乙個返回的 html 頁面都手動加上。使...