使用模板标记过滤模型查询集

时间:2016-03-06 05:38:08

标签: django django-models django-templates django-template-filters

有没有办法将查询集过滤器与with模板标记结合使用?

我正在尝试执行以下操作:

{% if request.user.is_superuser %}
   {% with arts=category.articles.all %}
{% else %}
   {% with arts=category.get_active_articles %}
{% endif %}
#other statements
   # Do some more template stuff in for loop

其他变体:

{% with arts=category.articles.all if self.request.user.is_superuser else category.get_active_articles %}

无法在模型中执行自定义查询集,因为我没有请求。

有没有办法获得我需要的过滤?我正在尝试为超级用户/员工和普通用户显示不同的查询集,以便我可以更新状态等而无需转到管理页面。

1 个答案:

答案 0 :(得分:1)

templates中编写逻辑是一种不好的约定/做法。 Templates应该传递数据,就是这样。在您的情况下,您可以在views

中执行此操作

应用/ views.py

from django.shortcuts import render
from app.models import Category

def articles(request):
    if request.user.is_superuser:
        articles = Category.articles.all()
    else:
        articles = Category.get_active_articles()

    context = {'articles': articles}
    return render(request, 'articles.html', context)

应用/模板/ articles.html

{% for a in articles %}
    {% a.title %}
    {% a.content %}
{% endfor %}


PS:阅读this以了解WHERE应该存在的内容。