如何访问Django模板中的字典元素?我想打印出每个选项得到的票数。我在模板中有这个代码:{% for choice in choices %}
{{choice.choice}} - {{votes[choice.id]}} <br />{% endfor %}votes只是一个字典,而它choices是一个模型对象。它通过以下消息引发异常:"Could not parse the remainder"
3 回答
慕容708150
TA贡献1831条经验 获得超4个赞
为了回应/扩展Jeff的评论,我认为你应该瞄准的只是Choice类中的一个属性,它计算与该对象相关的投票数:
class Choice(models.Model): text = models.CharField(max_length=200) def calculateVotes(self): return Vote.objects.filter(choice = self).count() votes = property(calculateVotes)
然后在您的模板中,您可以执行以下操作:
{% for choice in choices %} {{choice.choice}} - {{choice.votes}} <br /> {% endfor %}
模板标签,恕我直言,这个解决方案有点矫枉过正,但它也不是一个可怕的解决方案。Django中模板的目标是使您与模板中的代码隔离,反之亦然。
我会尝试上面的方法,看看ORM生成了什么SQL,因为我不确定它是否会预先缓存属性,只是为属性创建一个子选择,或者它是否会迭代/开启 - 需求运行查询以计算投票计数。但是,如果它生成了残酷的查询,您可以随时使用自己收集的数据填充视图中的属性。
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
choices = {'key1':'val1', 'key2':'val2'}
这是模板:
<ul>{% for key, value in choices.items %} <li>{{key}} - {{value}}</li>{% endfor %}</ul>
基本上,.items
是一个Django关键字,它将字典拆分为一(key, value)
对字符串,就像Python方法一样.items()
。这允许在Django模板中对字典进行迭代。
添加回答
举报
0/150
提交
取消