2011-08-19 43 views
2

我需要調用具有多個參數的過濾器。如何使用多個參數調用過濾器?

如果過濾器僅採用一個參數,例如「腰斬」,我們可以

{{ somevariable|cut:"0" }} 

叫它但是,如果我創建一個自定義過濾器,其有兩個參數,我不能正確的語法調用它。

答案,請問這只是:

  • 我不想送一個說法,在我的自定義過濾器解析它。
  • 我也不想連鎖過濾器。

我認爲用兩個參數調用是合法的,因爲有一個名爲urlizentrunc的默認過濾器。

def urlizetrunc(value, limit, autoescape=None): 
+1

[這個問題](可能重複http://stackoverflow.com/questions/420703/how-do-i-add-multiple-arguments-to-my-custom-template-filter-in-a-django -模板)? – Spycho

+0

@Spycho我不認爲這些是完全相同的。我跳過你的網址,但我沒有學習如何以合法的方式(例如Van Gale回答不hacky)來稱呼urlizentrunc。 – Thorn

+0

查看接受的答案。它說,自定義過濾器,[的文檔狀態,它不能這樣做(https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-filters) 。 – Spycho

回答

3

你不能。唯一的解決方法是傳入一個參數並將其解析爲零件,或者讓過濾器外部的變量通過。

The docs state that it cannot be done帶有自定義過濾器。有關更詳細的解釋,請參見this question

不能直接或者多個參數傳遞給非自定義過濾器,如urlizetrunc。 urlizetrunc從模板中獲取一個參數。 autoescape通過調用帶有「off」或「on」參數的autoescape標籤來設置。當您從模板中調用urlizetrunc時,它將傳遞autoescape設置爲的任何值。您無法直接從模板傳遞autoescape的值。有關更詳細的解釋,請參見this question

相關問題