2014-10-08 201 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 }}