2014-10-08 298 views
2

比方說,我有兩個變量傳遞給模板:var_avar_b。有沒有辦法來動態地解決它們,換句話說,從字符串構造變量名?像PHP的$$var_name從字符串構造變量名稱

舉例來說,如果我有一個letter變量與保存價值ab,我想通過寫類似的東西來渲染var_a

{{"var_"|some_sort_of_concat:letter}} 

,並得到var_a值或var_b取決於letter的值。這樣的事情可能嗎?

+0

您連答案一無所知說Django – MeLight 2014-10-08 10:42:24

+1

投票重新開放。這不是一個可以用templatefilter btw來完成的事情,但你可以使用templatetag來完成。 – Wolph 2014-10-08 10:53:22

+0

這裏有一個類似的問題:http://stackoverflow.com/questions/17148544/django-template-dynamic-variable-name – Wolph 2014-10-08 10:54:27

回答

0

我的意見是,如果您基於已知的事情做決定,那麼計算應該在您呈現模板之前發生。

您也可以使用字典即var = {「a」:「foo」,「b」:「bar」} 您不能直接在模板中索引字典,因此取決於您要實現的目標或者迭代字典或使用模板過濾器,如this question,here是票證的鏈接。

0

您可以創建一個字典,其變量名稱爲鍵和它們的值作爲值,然後創建一個模板過濾器以通過給定變量名稱獲取字典值。變量名,也可以從列表或其他任何所作的可變:

d = {"var_a": "a", "var_b": "b"} 

發送d的模板,創建一個模板過濾器「get_dictionary_value」:

def get_dictionary_value(d, key): 
    try: 
     if (key in d): 
      return d[key] 
    except: 
     pass 
    return "" 

然後在模板:

{{ d|get_dictionary_value:"var_a" }} 

或者:

{% for key in l %} 
    {{ d|get_dictionary_value:key }} 
{% endfor %} 

順便說一句,d [關鍵]的值也可以是一本字典,你可以再次申請該過濾器(並再次...):

{{ d|get_dictionary_value:key1|get_dictionary_value:key2 }}