为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

海绵宝宝撒 2019-08-26 18:53:09
如何访问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,因为我不确定它是否会预先缓存属性,只是为属性创建一个子选择,或者它是否会迭代/开启 - 需求运行查询以计算投票计数。但是,如果它生成了残酷的查询,您可以随时使用自己收集的数据填充视图中的属性。


查看完整回答
反对 回复 2019-08-26
?
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模板中对字典进行迭代。


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 1090 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信