我有一个主页,我希望在用户未登录时显示登录表单,或者如果他/她已登录则显示属于该用户的项目列表。
到目前为止,我想出了两种方法:
检查用户是否在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 或模板本身处理这些标准?
答案 0 :(得分:3)
我认为没有太大的性能差异。最重要的是你应该坚持MVC
模式。
template
只是为了显示view
提供的某种数据。任何类型的逻辑,例如决定基于请求者状态显示什么类型的数据,应始终由视图实现。因此,您应该将逻辑移动到视图功能中,以保证设计的清洁。
答案 1 :(得分:1)
逻辑应该在你的python代码中,而不是你的模板尽可能多。由于维护和面向未来的原因。
答案 2 :(得分:1)
这取决于你的HTML。如果您只想根据条件更改代码的一小部分,请检查模板内部:
{% if user.is_authenticated %}
<h3>Welcome</h3>
{% else %}
<a href="/path/to/login">Login</a>
{% endif %}
但如果items.html
和login.html
是不同的大模板,那么您一定要在视图中进行登录。