我想在django模板中做一些看似微不足道的事情,但很难想象怎么做。假设我有一个列表 field_list = [' a',' b',' c' ]和一个名为 report_item 的容器。在模板中,我想基本上做这个:
{% for fld_name in field_list %}
<td>{{ report_item.{{fld_name}} }}</td>
{% endfor %}
我已经验证了report_item.a,.b,.c是可访问的(即使它们不是应该没问题)。我已尝试过引用等各种可能的组合和网络搜索解决方案,阅读文档N次但仍然会出现此错误:
Could not parse the remainder: '{{fld_name' from 'field_list.{{fld_name'
非常感谢您的帮助。
修改 我被问到下面是如何建立我的items_list:
context[ "items_list" ] = MyModel.objects.filter(...)
我有:
context[ "field_list" ] = [
[ "Date Placed", "date_placed" ],
...
]
在模板中我有:
{% for report_item in items_list %}
{% for fld_hdr, fld_name in field_list %}
{{ report_item.{{fld_name}} }}
{% endfor %}
{% endfor %}
如前所述,如果我这样做:
{{ report_item.date_placed }}
它工作正常。
答案 0 :(得分:2)
您想要从对象动态获取属性。对于Python中的那个,你使用getattr
,在Python模板中执行此操作的方法是编写一个在其参数上调用getattr的过滤器。
@register.filter
def get_field(obj, arg):
return getattr(obj, arg)
现在你可以{{ report_item|get_field:fld_name }}
答案 1 :(得分:1)
试试{{report_item.fld_name}}。希望这可以帮助。