2011-02-10 35 views
3
{% gen_aws "hello" %} 

在我的文件,我這樣做:Django中我的模板標籤怎麼不起作用?

#I want to add "goodbye" to every word passed to this tag. 
@register.tag(name="gen_aws") 
def gen_aws(s): 
    return s + "goodbye" 

的.py文件是好的......我的一切,包括罰款。我有其他模板「過濾器」在那裏工作正常。但後來我在該文件中添加了這個,這個模板標籤不起作用。

回答

9

您對「不起作用」的描述不是很準確(確切地說它不存在)。但是我猜你會遇到錯誤,因爲找不到標籤。

documentation清楚地表明您需要在您的應用中使用「templatetags」模塊,例如,使用像「mytags」這樣的子模塊。然後,您必須將這些標籤包含在您要使用它們的每個模板中。你可以用{% load mytags %}來做到這一點。

「mytags」模塊包含您的「gen_aws」標籤。

編輯:出現錯誤「gen_aws()只需要1個參數(2給定)」,因爲普通標籤可以以非常自定義的方式解析它們的參數。因此他們得到了「解析器」和「令牌」的參數。在你的情況下,所謂的simple tag就足夠了 - 然後Django自動爲你分析參數並將它們作爲Python值傳遞。所以只需用@register.simple_tag替換@register.tag即可。

+0

我已經加載了我的標記。 – TIMEX 2011-02-10 09:43:03

4

"no attribute 'must_be_first'"錯誤的另一個可能原因是您忘記了在您的班級中繼承django.template.Node。 (因爲這幾乎是Google這一短語的唯一結果,所以我認爲我會在此添加此內容,以便爲下一個人節省幾分鐘時間。)