当前位置: 首页 > 面试题库 >

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

鲁英卫
2023-03-14
问题内容

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

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

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

该消息引发异常:

"Could not parse the remainder"

问题答案:

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



 类似资料:
  • 问题内容: 我正在将字典从我的视图传递到模板。因此可以传入并循环遍历键,值对,但我还没有找到一种从特定键直接在视图中直接访问的优雅解决方案,例如bu json.items [“ key1”]。我可以使用一些if / then语句,但是我宁愿直接这样做也可以吗? 这是html模板中的循环代码: 问题答案: Django模板语言支持按以下方式查找字典键: 请参阅有关变量和查找的模板文档。 模板语言未提

  • 问题内容: 我的字典看起来像这样(字典中的字典): 现在,我只是想在模板上显示信息,但是我很挣扎。我的模板代码如下: 它只是在模板上显示“ 0”? 我也尝试过: 这甚至不显示结果。 我想也许我需要更深入地迭代一个级别,所以尝试了一下: 但这不会显示任何内容。 我究竟做错了什么? 问题答案: 可以说你的数据是- 你可以使用该data.items()方法来获取字典元素。注意,在django模板中,我们

  • 问题内容: 我正在将数组传递给我的Django模板。我要访问的阵列中的阵列的各个元素(例如)等等,而不是通过整个阵列循环。 有没有办法在Django模板中做到这一点? 问题答案: 请记住,Django模板中的点符号用于Python中的四种不同符号。在模板中,可以表示以下任何一项: 它按此顺序尝试它们,直到找到匹配项。因此,你将获得列表索引,因为你的对象不是以3为键的dict,没有名为3的属性,也没

  • 问题内容: 我的视图代码基本上是这样的: 我想在Django模板中执行的操作是: 我想要这样输出: 但是通过变量名称via对dict的引用实际上不起作用。我怀疑它是在内部而不是在做。有什么办法可以解决此问题? 问题答案: 没有内置的方法可以执行此操作,您需要编写一个简单的模板过滤器才能执行此操作:http : //code.djangoproject.com/ticket/3371

  • 问题内容: 我们有一个基于自定义数据库的系统,其中许多属性被命名为包含连字符,即: 不能按以下方式在模板中访问这些属性: Django为此抛出异常。我想避免不得不转换所有键(和子表键)以使用下划线来解决此问题。有更容易的方法吗? 问题答案: 如果您不想重组对象,那么自定义模板标签可能是唯一的选择。对于使用任意字符串键访问字典,此问题的答案提供了一个很好的示例。 对于懒惰的人: 您这样使用: 如果要

  • 问题内容: 我正在尝试使用以下划线字符开头的键访问字典的元素。例如: 我正在尝试在Django模板中访问它们。显然,我意识到您无法从Django模板访问带下划线的python变量(因为它们在Python中被视为私有),但这是一个dict对象,其中任何不可变对象都是有效键。 我无法使用{{my_dict._source}}访问Django模板中的上述字典,因此我认为Django正在阻止它。准确吗?