关于django:使用模板标记过滤模型查询集

filter model queryset using with template tag

有没有一种方法可以将queryset过滤器与with模板标记结合起来?

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

1
2
3
4
5
6
7
{% 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

其他变更:

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

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

有没有办法得到我需要的过滤?我尝试为超级用户/员工和普通用户显示不同的查询集,这样我就可以在不必转到管理页面的情况下对状态等进行一些更新。


templates中编写逻辑是一种糟糕的约定/实践。应该传递templates数据,就是这样。在您的情况下,您可以在您的views中执行此操作。

应用程序/视图.py

1
2
3
4
5
6
7
8
9
10
11
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)

应用程序/模板/文章.html

1
2
3
4
{% for a in articles %}
    {% a.title %}
    {% a.content %}
{% endfor %}

附言:读这个来理解在哪里应该存在什么。