2014-01-31 113 views
3

我想在我的頁面元描述中將&更改爲and替換Django模板中的字符

這是我試過

{% if '&' in dj.name %} 
    {{ dj.name.replace('&', 'and') }} 
{% else %} 
    {{ dj.name }} 
{% endif %} 

這是行不通的。它仍然顯示爲&

回答

10

dj.name.replace('&', 'and') 您無法使用參數調用方法。您需要編寫自定義過濾器。

官方指南是在這裏:

https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/#registering-custom-filters

好吧,這裏是我的例子,比如說,在一個名爲「問題」,我想寫一個過濾器to_and它取代「&」到「應用程序和'在一個字符串中。

在/ PROJECT_NAME /問題/ templatetags,創建一個空白__init__.pyto_and.py這是這樣:

from django import template 

register = template.Library() 

@register.filter 
def to_and(value): 
    return value.replace("&","and") 

模板,使用說明:

{% load to_and %} 

那麼你就可以享受:

{{ string|to_and }} 

注意,目錄名稱templatetags和文件名to_and.py不能是其他名稱。從而

+1

我想這會更好,如果你寫一個示例過濾器。 – FallenAngel

+0

@FallenAngel它來... – tcpiper

+0

這將是更好,如果你的例子地址'&»和'替換。既然它會完全回答OP的問題。 – FallenAngel

1

documentation說:

由於Django的有意限制了模板語言可用邏輯的處理量,這是不可能的參數傳遞給從模板內訪問的方法調用。數據應該在視圖中計算,然後傳遞給模板進行顯示。

您必須事先編輯dj.name

編輯:看起來像Pythoner知道更好的方法:registering a custom filter。 upvote他;)