使django模板对象可迭代

时间:2012-08-13 19:10:47

标签: python django django-templates

我有一个包含许多特征的字典:

sort_options = SortedDict([
    ("importance" , ("Importance" , "warning-sign" , "importance")),
    ("effort" , ("Effort" , "wrench" , "effort")),
    ("time_estimate" , ("Time Estimate" , "time" , "time_estimate")),
])  

我还有一个操作列表作为查询结果。每个动作都有这些属性;在我的模板中,我可以致电{{action.effort}}或{{action.time_estimate}}并获得结果。

我正在遍历我的sort_options来填充twitter引导图标:

{% for key, icon in sort_options.items %}
    <i class="icon-{{ icon.1 }}"></i>
{% endfor %}

但我也希望显示每个属性的动作值。基本上,像:

{% for key, icon in sort_options.items %}
    <i class="icon-{{ icon.1 }}"></i>
    {{ action.key }}
{% endfor %}

密钥会解析为“重要性”或“努力”。我知道这不起作用。所以我试图利用this question中提出的解决方案。

该解决方案提出了模板过滤器:

def hash(h,key):
    if key in h:
        return h[key]
    else:
        return None
register.filter(hash)

{{ user|hash:item }}

问题使用的字典如下:

{'item1': 3, 'name': 'username', 'item2': 4}

我尝试了以下内容:

{% for key, icon in sort_options.items %}
    <i class="icon-{{ icon.1 }}"></i>
    {{ action|hash:key }}
{% endfor %}

但得到了一个错误:

Caught TypeError while rendering: argument of type 'Action' is not iterable

我相信这是因为模板过滤器只获取对象的一个​​属性(可能是名称),而不是整个字典:

[<Action: Action_one>, <Action: Task_two>...]

有没有办法强制模板将完整对象传递给模板标记?

1 个答案:

答案 0 :(得分:0)

我想我终于明白了。你想要相当于

getattr(action, key)

在你的模板中。 This answer描述了您需要执行的getattribute模板标签。

相关问题