访问django模板中的自定义查询集for-loop

时间:2018-04-16 12:47:42

标签: python django django-models django-templates

我想循环遍历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 %}

那么我需要做些什么来访问我的模板中的自定义查询集(在模型中创建,但我可以把它放在其他地方,如果有帮助的话)?

1 个答案:

答案 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