我想循环遍历Django模板中的查询集,如下所示:
{% for thing in things %}
//Do stuff
{% endfor %}
但我不想遍历所有“事物”,而是我们的一部分。 让我们说我的东西 - 模型有一个charfield“颜色”。现在我只想循环颜色不是None的东西。 我现在将在我的模型中创建一个自定义查询集,如下所示:
def colored_things(self):
return things.objects.filter(color__isnone=False)
但是如果我回到我的模板中循环我的彩色事物,它就好像它是空的(我的for循环的{%empty%}部分被触发)。
{% for thing in things %}
//Do stuff
{% empty %}
{% endfor %}
那么我需要做些什么来访问我的模板中的自定义查询集(在模型中创建,但我可以把它放在其他地方,如果有帮助的话)?
答案 0 :(得分:1)
向模型添加(如果您还没有)get_context方法并添加包含过滤器的上下文属性。 我会看起来像这样:
def get_context(self, request, *args, **kwargs):
context = super(THINGS-MODEL, self).get_context(request, *args, **kwargs)
context['colored_things'] = THINGS-MODEL.objects.filter(color__isnone=False)
return context
现在在您的模板中,您可以在get_context方法中循环包含您之前设置的过滤数据的colored_things
。