在Django模板中通过变量访问字典?

27 投票
4 回答
34306 浏览
提问于 2025-04-15 18:02

我的视图代码大致是这样的:

context = Context() 
context['my_dict'] = {'a': 4, 'b': 8, 'c': 15, 'd': 16, 'e': 23, 'f': 42 }
context['my_list'] = ['d', 'f', 'e', 'b', 'c', 'a']

我想在我的Django模板中做到这一点:

<ul>
{% for item in my_list %} 
  <li>{{ item }} : {{ my_dict.item }}</li>
{% endfor %} 
</ul>

我希望输出的结果是:

<ul> 
  <li> d : 16 </li> 
  <li> f : 42 </li> 
  <li> e : 23 </li> 
  <li> b : 8 </li> 
  <li> c : 15 </li> 
  <li> a : 4 </li> 
</ul> 

但是,通过变量名来引用字典的方式 {{ my_dict.item }} 实际上并不能正常工作。我怀疑它内部是用 my_dict['item'] 来处理,而不是 my_dict[item]。有没有什么办法可以解决这个问题呢?

4 个回答

5

这是一个使用建议答案的案例。

在这个例子中,我创建了一个通用的模板,用来输出来自视图的表格数据。关于列的元数据保存在context["columnMeta"]里。

因为这是一个字典,所以我不能依赖字典的键来按顺序输出列,因此我把这些键放在一个单独的列表中。

在我的view.py文件中:


c["columns"] = ["full_name","age"]
c["columnMeta"] = {"age":{},"full_name":{"label":"name"}}

在我的templatetags文件中:


@register.filter
def getitem ( item, string ):
  return item.get(string,'')

在我的模板中:

<tr>
<!-- iterate columns in order specified -->
{% for key in columns %}
<th>
 <span class="column-title">
    <!-- look label in meta dict.  If not found, use the column key -->
   {{columnMeta|getitem:key|getitem:"label"|default:key}}
  </span>
</th>
{% endfor %}</tr>
7

试试这个方法来显示字典里的键和值:

{% for key, value in your_dict.items %}
    {{ key }}: {{ value }}
{% endfor %}

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#for

16

没有现成的方法可以做到这一点,你需要写一个简单的模板过滤器来实现这个功能:http://code.djangoproject.com/ticket/3371

撰写回答