首先,我是否理解Django标签实际上是一种迷你语言,并且Python不会在其中运行?
如果是这样,我该如何处理视图难以预处理的值?例如,这就是我想要做的事情(用户有很多评级):
{% for user in users %} # Where users are defined in the view/context
...
{% endfor %}
然后在里面,我尝试了几件事
{% for rating in user.ratings %}
或
{% for rating in Rating.objects.filter(user=user) %}
前者永远不会迭代。后者是可怕的,无论如何都不起作用 - 它引发了TemplateSyntaxError at / Could not parse the remainder
但由于它只是在用户循环的中间,我让相关用户进行过滤,我不确定如何在视图中设置第二个QuerySet。
这里最好的方法是什么?
答案 0 :(得分:2)
你是对的,你不能在模板中运行任意Python:语法由模板系统定义,默认情况下为Django template language (DTL)。
在您的特定情况下,有一种简单的方法可以访问模型对象的外键关系:使用_set
关键字。以下应该有效:
{% for rating in user.rating_set.all %}
<!-- do stuff with rating -->
{% endfor %}
通过仅搜索item.ratings
,期望ratings
成为模型字段。您需要指定_set
以指示它查看外键模型。
这种情况很简单:在其他情况下,最好的选择是在视图中运行逻辑并将变量传递给模板的上下文或(非平凡)来制作自己的自定义模板标记。
答案 1 :(得分:0)
您需要使用_set.all
{% for user in users %} # Where users are defined in the view/context
{% for rating in user.rating_set.all %}
...
{% endfor %}
{% endfor %}
如果您必须过滤see this。