溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

django如何自定義模板標(biāo)簽

發(fā)布時間:2021-07-19 10:12:12 來源:億速云 閱讀:102 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要為大家展示了“django如何自定義模板標(biāo)簽”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“django如何自定義模板標(biāo)簽”這篇文章吧。

代碼布局

自定義模板標(biāo)簽必須位于django的某個應(yīng)用中

該應(yīng)用中新建templatetags目錄,和models.py,views.py同一級別

結(jié)構(gòu)如下:

polls/
  __init__.py
  models.py
  templatetags/
    __init__.py
    poll_extras.py
  views.py

模板中調(diào)用標(biāo)簽:

{% load poll_extras %}

為了讓load標(biāo)簽工作,該標(biāo)簽所在應(yīng)用必須在INSTALLED_APPS中

templatetags里有多少個模塊沒有限制,因為{% load %}會載入給定模塊名的標(biāo)簽過濾器,而不是應(yīng)用的名稱

為了成為一個可用的標(biāo)簽庫,必須注冊,放在模塊頂部

from django import template
register=template.Library()

自定義標(biāo)簽過濾器

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

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

  • 參數(shù)的值 —— 可以有一個初始值,或者完全不要這個參數(shù)。

例如,在{{ var|foo:"bar" }}中,foo過濾器應(yīng)當(dāng)傳入變量var和參數(shù) "bar"。

def cut(value, arg):
  """Removes all values of arg from the given string"""
  return value.replace(arg, '')

下面是這個過濾器應(yīng)該如何使用:

{{ somevariable|cut:"0" }}

大多數(shù)過濾器沒有參數(shù)。在這種情況下,你的函數(shù)不帶這個參數(shù)即可。示例︰

def lower(value): # Only one argument.
  """Converts a string into all lowercase"""
  return value.lower()

注冊自定義過濾器

方法1:

register.filter('cut', cut)
register.filter('lower', lower)

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

過濾器的名稱(一個字符串對象)

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

方法2:register.filter()用作裝飾器

@register.filter(name='cut')
def cut(value, arg):
  return value.replace(arg, '')

@register.filter
def lower(value):
  return value.lower()

下邊是實例:

django如何自定義模板標(biāo)簽

my.pyfrom django import template
register=template.Library()
@register.filter
def myadd(param):
  res=param+"************************"
  return res
@register.filter
def mycul(param,num):
  res=param*num
  return res
views.pydef tags(request):
  print("hello")
  return render(request,'mytags.html')
tags.html<body>
  {% load my %}
  {{ 'tags'|myadd }}

  {{ 'tags'|mycul:5 }}
</body>

結(jié)果:

tags************************ tagstagstagstagstags

以上是“django如何自定義模板標(biāo)簽”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI