如何访问Django模板中的字典元素?

如何访问Django模板中的字典元素?

我想打印出每个选项得到的票数。我在模板中有这个代码:

{% for choice in choices %}
    {{choice.choice}} - {{votes[choice.id]}} <br />{% endfor %}

votes只是一个字典,而它choices是一个模型对象。

它通过以下消息引发异常:

"Could not parse the remainder"


海绵宝宝撒
浏览 1146回答 3
3回答

慕容708150

为了回应/扩展Jeff的评论,我认为你应该瞄准的只是Choice类中的一个属性,它计算与该对象相关的投票数:&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;Choice(models.Model): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;models.CharField(max_length=200)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;calculateVotes(self): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;Vote.objects.filter(choice&nbsp;=&nbsp;self).count() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;votes&nbsp;=&nbsp;property(calculateVotes)然后在您的模板中,您可以执行以下操作:&nbsp;&nbsp;&nbsp;&nbsp;{%&nbsp;for&nbsp;choice&nbsp;in&nbsp;choices&nbsp;%} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{{choice.choice}}&nbsp;-&nbsp;{{choice.votes}}&nbsp;<br&nbsp;/> &nbsp;&nbsp;&nbsp;&nbsp;{%&nbsp;endfor&nbsp;%}模板标签,恕我直言,这个解决方案有点矫枉过正,但它也不是一个可怕的解决方案。Django中模板的目标是使您与模板中的代码隔离,反之亦然。我会尝试上面的方法,看看ORM生成了什么SQL,因为我不确定它是否会预先缓存属性,只是为属性创建一个子选择,或者它是否会迭代/开启 - 需求运行查询以计算投票计数。但是,如果它生成了残酷的查询,您可以随时使用自己收集的数据填充视图中的属性。

qq_遁去的一_1

choices&nbsp;=&nbsp;{'key1':'val1',&nbsp;'key2':'val2'}这是模板:<ul>{%&nbsp;for&nbsp;key,&nbsp;value&nbsp;in&nbsp;choices.items&nbsp;%}&nbsp; &nbsp;&nbsp;<li>{{key}}&nbsp;-&nbsp;{{value}}</li>{%&nbsp;endfor&nbsp;%}</ul>基本上,.items是一个Django关键字,它将字典拆分为一(key, value)对字符串,就像Python方法一样.items()。这允许在Django模板中对字典进行迭代。
打开App,查看更多内容
随时随地看视频慕课网APP