Django dict key,for循环中的值不起作用

时间:2018-12-29 11:50:41

标签: python django dictionary key

我在Django问题上有些卡住,无法在for循环中访问dict的值。它可以在for循环之外运行,而不能在内部运行。

我在这里想念明显的东西吗?

Python:

err{}
err['else'] = {'class': 'Low', 'txt': 'zero'}
err['if'] = {'class': 'High', 'txt': 'one'}
data = { 'errors': err }
return render(request, 'index/error.html', data)

HTML模板:

<p>{{ errors }}</p>
<p>{{ errors.if }}</p>
<p>{{ errors.if.class }}</p>

{% for error in errors %}
  <div class="{{ error.class }}"><p>{{ error.txt }}</p></div>
{% endfor %}

上面3行用于代码调试,工作正常。 for循环不会产生任何代码。

最好的问候, LVX

3 个答案:

答案 0 :(得分:7)

您可能需要访问您称为.items()的{​​{1}}中的dict。只需在errors上进行迭代,即可为您提供密钥,但不会提供值。

您可以将代码更改为:

dict

当然,如果不需要键({% for k, v in errors.items %} <div class="{{ v.class }}"><p>{{ v.txt }}</p></div> {% endfor %} if),那么也可以使用else而不是.values()来获取内部的值items()

答案 1 :(得分:2)

拉尔夫的答案足以解决这个问题,我只想在这里添加更多信息。

当模板系统遇到变量名中的点时,它将按以下顺序尝试以下查找:

  1. 字典查询(例如:foo ['bar'])
  2. 属性查找(例如:foo.bar)
  3. 方法调用(例如:foo.bar())
  4. 列表索引查找(例如:foo [2])

系统使用第一种有效的查找类型。

答案 2 :(得分:0)

您应该尝试这样- 错误['class']

第二种方式- 错误[key] ['class']

使用forloop- 对于错误的k,v:     print(v ['class'])