2010-08-09 18 views
2

例如,假設有一個自定義模板標籤有什麼方法可以在Django模板中重複使用模板標籤值嗎?

{% custom_tag "parameter" %} 

這個標籤需要一些嚴重的數據庫工作來計算。

現在我需要有類似的東西(僞):

if {% custom_tag "parameter" %} 
.... 
else 
.... 

我知道,與上下文變量我可以這樣做:

{% with variable.x.y.z as v %} 
{% if v %} 
    Blah-Blah-Blah {{ v }} 
{% else %} 
    No value 
{% endif %} 
{% endwith %} 

不過是有沒有辦法跟你實現這一目標模板標籤值?

編輯: 我已經到目前爲止想出了唯一的選擇就是讓一個過濾掉我的模板標籤:

{% if "parameter" | custom_tag %} 
Blah {{ "parameter" | custom_tag }} 
{% else %} 
.... 
{% endif %} 

但這一選擇使得custom_tag執行兩次,這不是很好的性能 - 明智

回答

3

我還沒有測試,但我想,您可以從您的自定義標籤的變量添加到上下文..也許這將幫助你 http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#setting-a-variable-in-the-context

+0

不幸的是,我有一個參數使用templatetag,所以我真的不能創建一個上下文變量:( – xyzman 2010-08-09 10:26:30

+0

以及我仍然認爲你的答案是我發佈的鏈接,如果你看看在他們的例子中,他們也傳遞了一個參數給自定義標籤,最後他們創建了一個可以用在模板其餘部分的變量,所以我猜你可以這樣做: {%custom_tag「參數」%} {%if response%} bla bla {%else%} bla bla 假設「響應」是在自定義標記上創建的變量 – pleasedontbelong 2010-08-09 10:58:06

+0

感謝您的想法 我已經定義了自定義標籤,它在裏面設置了一個上下文變量。例如,在django template/defaulttags.py中看到「do_with」。 – xyzman 2010-08-09 13:17:26

1

我相信你可以指定filteri結果ng變量並使用它。這樣的過濾器將only get called once。從文檔::以簡單名稱緩存複雜變量。這在訪問多次「昂貴」的方法(例如命中數據庫的方法)時非常有用。

{% with "parameter" | custom_tag as result %} 
{% if result %} 
    Blah {{ result }} 
{% else %} 
    .... 
{% endif %} 
{% endwith %} 
相關問題