![](/img/trans.png)
[英]Template not rendering properly with if user.is_authenticated for Django
[英]Django is it better to check user.is_authenticated in views.py or in template?
我有一個主頁,我想在用戶未登錄時顯示登錄表單,或者如果他/她已登錄則顯示屬於該用戶的項目列表。
到目前為止,我想出了兩種方法:
檢查用戶是否在views.py中進行了身份驗證並呈現相應的視圖(在我的views.py中 ):
if request.user.is_authenticated(): return render(request, 'items.html') else return render(request, 'login.html')
直接檢查模板並為每個案例生成相應的HTML(在我的index.html中 ):
{% if user.is_authenticated %} HTML for my items list {% else %} HTML for my login form {% endif %}
那么哪種方法更適合處理這個? 這些方法的性能差異很大嗎? 我們應該在views.py或模板本身處理這些標准嗎?
我不認為有很大的性能差異。 最重要的是你應該堅持多少MVC
模式。
template
僅用於顯示view
提供的某種數據。 任何類型的邏輯,例如決定基於請求者狀態顯示什么類型的數據,應始終由視圖實現。 因此,您應該將邏輯移動到視圖功能中,以保證設計的清潔。
邏輯應該在你的python代碼中,而不是你的模板盡可能多。 由於維護和未來的原因 。
這取決於你的HTML。 如果您只想根據條件更改代碼的一小部分,請檢查模板內部:
{% if user.is_authenticated %}
<h3>Welcome</h3>
{% else %}
<a href="/path/to/login">Login</a>
{% endif %}
但是如果items.html
和login.html
是不同的大模板,那么你一定要在視圖中進行登錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.