Django模板访问嵌套数据

时间:2009-12-11 21:37:14

标签: django django-templates

这看起来很傻,但我不明白Django Templates如何在Contexts中访问嵌套数据。我可以使用。访问嵌套在上下文数据结构中的字典值。符号 - {{ aDictionary.i_am_a_key }}工作正常。但是,如果我尝试迭代一个键列表并从同一个字典中获取它们的值,我什么也得不到。所以

{% for key in keys_list %}{{ aDictionary.key }}{% endfor}}

只是生成空白。

我在这里缺少什么? Django不支持动态上下文字典的密钥访问吗?我是否需要编写自定义标记才能执行此操作?

修改

我的例子假设这些数据结构:

aDictionary = {'i_am_a_key': 'all good', 'i_am_another_key': 'okay'}
keys_list = ['i_am_a_key', 'i_am_another_key']

3 个答案:

答案 0 :(得分:5)

这是Django模板语言的基本限制。

三种解决方案:

  1. 使用{% for key,value in foo.items %}获取密钥和值。
  2. 使用Jinja2 - 一个几乎类似Django的模板系统。
  3. 使用expr djangosnippet进行访问数学运算。

答案 1 :(得分:3)

这是一种不同的方法,但根据你想要实现的目标,这就是我要采取的角度。

如果你想保留一些字典的子集并且你想以某种有序的方式迭代它的值,我会将你感兴趣的元素复制到SortedDict(django / utils / datastructures)的.py)。

在我看来,像这样的东西应该存在于视图中(所有这些都是未经测试的):

sorted_dict = SortedDict()
for key in orig_dict:
    if interested(key):
        sorted_dict[key] = orig_dict[val]

并且模板应该非常愚蠢:

{% for key, val in sorted_dict.items %}{{ val }}{% endfor}}

答案 2 :(得分:2)

这不是同一个问题,但答案类似于#844746

你最终会得到一个过滤器,你可以做...

{% load getattribute %}
{% for key in keys_list %}
    {{ aDictionary|attr:key }}
{% endfor %}