2012-04-20 35 views
0

我有我的模板下面的代碼:Django的模板檢查空時,我有一個if內爲

 
{% for req in user.requests_made_set.all %} 
    {% if not req.is_published %} 
    {{ req }} 
    {% endif %} 
{% empty %} 
    No requests 
{% endfor %} 

如果有一些請求,但沒有人看到is_published = True,那麼我怎麼會輸出一個消息(如「沒有請求」)?我只想使用Django模板,而不是在我看來!

感謝

+0

您可以使用http://stackoverflow.com/questions/844746/performing-a-getattr-style-lookup-in-a-django-template檢查中存在REQ屬性。 – Exploit 2012-04-20 22:54:37

回答

5

即使這也許是可能的模板來實現的,我(和可能很多其他人)會建議反對。爲了實現這一點,你基本上需要找出數據庫中是否有符合某些條件的對象。這當然不屬於模板。

模板旨在用於定義如何顯示內容。您正在解決的任務是確定要顯示的內容。這絕對屬於視圖而不是模板。

如果您希望避免將信息放在視圖中,而不管視圖在哪個頁面上顯示,請考慮使用上下文處理器,該處理器會自動將所需信息添加到模板上下文,或者寫入一個模板標籤,可以爲你解決這個問題。

+0

好吧,我可能會創建一個模板標籤。我只是認爲這應該是可能的,因爲django已經有{%empty%}標記了...... – Serafeim 2012-04-21 07:01:40

+0

是的,只有'{%empty%}'檢查上下文中的可迭代對象是否爲空。不是它的過濾子集。此外,代碼並不理想。想象一下'requests_made_set'包含數千個請求,並且只有少數幾個被髮布。實際上,您只需要一個子集,就可以遍歷所有這些子集。你一定想在數據庫級別過濾這個。 – koniiiik 2012-04-21 07:29:11

+0

也許你是對的。快速提問:如果我創建了一個名爲only_published的模板過濾器,它接受一個查詢集(user.requests_made_set.all queryset)並使用它過濾請求{%for user.requests_made_set.all | only_published%}中的req是否可以工作?另外,如果我使用它,只會顯示已發佈的請求(懶惰評估)?謝謝 ! – Serafeim 2012-04-21 17:24:44