【问题标题】:Constructing a variable name from strings从字符串构造变量名
【发布时间】:2014-12-02 23:18:47
【问题描述】:

假设我有两个变量传递给模板:var_avar_b。有没有办法动态地解决它们,或者换句话说,从字符串构造变量名?类似于 PHP 的 $$var_name

例如,如果我有一个具有 ab 值的 letter 变量,我想通过编写来呈现 var_a类似:

{{"var_"|some_sort_of_concat:letter}}

并根据letter 的值获取var_avar_b 的值。这样的事情可能吗?

【问题讨论】:

  • 你链接到的答案没有提到 Django
  • 投票重新开放。顺便说一句,这不是模板过滤器可以完成的事情,但是您可以使用模板标签来完成。
  • 这里有一个类似的问题:stackoverflow.com/questions/17148544/…
  • 感谢@Wolph 会检查一下

标签: django django-templates


【解决方案1】:

我的观点是,如果您根据已知的东西做出决定,那么计算应该在您渲染模板之前发生。

您也可以使用字典,即 var = {"a":"foo", "b":"bar"} 您不能直接在模板中索引字典,因此取决于您要实现的目标,要么迭代字典,要么使用模板过滤器,如this questionhere 是票证的链接。

【讨论】:

    【解决方案2】:

    您可以创建一个字典,将变量名作为键,将它们的值作为值,然后创建模板过滤器以通过给定的变量名获取字典值。变量名也可以是从列表或其他任何东西中获取的变量:

    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[key] 的值也可以是一个字典,你可以再次应用这个过滤器(再一次......):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 2019-05-13
      • 1970-01-01
      相关资源
      最近更新 更多