小编典典

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

all

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

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

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

它会引发此消息的异常:

"Could not parse the remainder"

阅读 60

收藏
2022-06-21

共1个答案

小编典典

为了回应/扩展 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,因为我不确定它是否会预先缓存属性并仅为属性创建子选择,或者它是否会迭代/打开-
需求运行查询以计算投票计数。但是,如果它会产生严重的查询,您总是可以使用您自己收集的数据填充视图中的属性。

2022-06-21