【问题标题】:Django template {% with %} using variable as object valueDjango 模板 {% with %} 使用变量作为对象值
【发布时间】:2016-10-20 18:15:15
【问题描述】:

我有一个 django 模板,我在其中为模板变量赋值,但我需要使用该值来访问特定对象。即:

  {% with operations.type as type %}
    {{ models.{{type}} }} <!-- HOW DO I DO THIS? -->
  {% endwith %}

是否有我不知道的标签/过滤器?谢谢。

真的在模板里我只想做的:

type = "MyType1"
data = models.type

我的数据看起来像(json):

{
   "models": {
      "MyType1": { "data": "somemoredata" },
      "MyType2": { "data": "somemoredata" },
      "MyType3": { "data": "somemoredata" },
  }
}

【问题讨论】:

  • 我认为你必须做自定义过滤器。
  • 第一条规则——不要将逻辑放入模板中。只进入视图。

标签: django templates variables object


【解决方案1】:

不是直接的,但您可以创建 custom filter 并执行以下操作:

@register.filter(name='getattr')
def get_a_field(obj_id, attr_str):
    my_obj = MyModel.objects.get(id=obj_id)
    return getattr(my_obj, attr_str)

{% with operations.type as type %}
    {{ models|getattr:type }}
  {% endwith %}

【讨论】:

  • 很酷,谢谢。我认为这让我朝着正确的方向前进。但是我收到一条错误消息:“'dict' object has no attribute 'MyTypeValue'”——它肯定有。
  • 我传递了可能最终被序列化的对象。您可以只获取值 dict 样式或将对象 ID 传递给过滤器并在那里获取对象
  • 对不起。我并不完全跟随。 “类型”实际上是这个对象中的一个索引
  • 用我提到的第二个选项更新了我的答案
  • 嗯好的。所以我真正想做的就是:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 2021-09-23
相关资源
最近更新 更多