0

有沒有辦法將查詢集過濾器與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

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明白什麼應該存在的位置。