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

Posted

技术标签:

【中文标题】Django dict键,for循环中的值不起作用【英文标题】:Django dict key,value in for loop does not work 【发布时间】: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

【问题讨论】:

【参考方案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 的回答对这个问题来说已经足够了,我只是想在这里补充一点信息。

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

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

Rohit:根据我对 Django 的理解,这是不允许的。如果我错了,请纠正我。 @RohitGarg 您不能在Django 模板中使用括号进行访问。另见this answer

以上是关于Django dict键,for循环中的值不起作用的主要内容,如果未能解决你的问题,请参考以下文章

jQuery循环.each()JSON键/值不起作用

Django 模型字段可调用默认值不起作用

在子组件的 beforeDestroy/Destroyed 循环中更改道具的值不起作用

RedBeanPHP:Find 中的值不起作用

根据字典替换数据框列中的值不起作用[重复]

从双数组中获取最小值不起作用