【问题标题】:Django dict key,value in for loop does not workDjango dict键,for循环中的值不起作用
【发布时间】:2019-05-26 21:52:07
【问题描述】:

我遇到了一个 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

【问题讨论】:

    标签: python django dictionary key


    【解决方案1】:

    您可能需要访问您称为errorsdict 中的.items()。只需遍历 dict 即可为您提供键,但不会提供值。

    您可以将代码更改为:

    {% for k, v in errors.items %}
      <div class="{{ v.class }}"><p>{{ v.txt }}</p></div>
    {% endfor %}
    

    当然,如果您不需要密钥(ifelse),那么您也可以使用 .values() 而不是 items() 来获取 dict 中的值。

    【讨论】:

    • 感谢拉尔夫,成功了。我觉得这是一种奇怪的方式,但如果你看一下代码,它就会有某种意义。
    • 能否请您提供一个不知道关键信息的示例,例如:class 或 txt?
    【解决方案2】:

    Ralf 的回答对这个问题来说已经足够了,我只是想在这里补充一点信息。

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

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

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

    【讨论】:

      【解决方案3】:

      你应该这样尝试—— 错误['class']

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

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

      【讨论】:

      • Rohit:根据我对 Django 的理解,这是不允许的。如果我错了,请纠正我。
      • @RohitGarg 您不能在Django 模板中使用括号进行访问。另见this answer
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 2017-09-09
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      相关资源
      最近更新 更多