Django:1为不同的用户查看?
在我的项目中,我想在侧边菜单和内容页面之间拆分页面。 我想展示一个用户类型不同的sidemenu(有5个用户类型,所以会有5个sidemenus)。但有时候,要显示的内容页面可以与这5种用户类型相同。Django:1为不同的用户查看?
我正在寻找一个“模式”来处理这个问题,我想到了一个,但从未在另一个项目中看到过它。我希望你能告诉我,如果这是一个好或坏的做法:
- 1 URI所有用户类型
- 在views.py,1个查看所有用户类型(如/ MYAPP/display_home。) 。在视图中,我尝试了解用户是否已登录,然后知道我们正在处理哪种类型的用户。然后,重定向到HTML,在上下文中传递一个包含用户类型的变量。
- 最后,在模板中,这样的事情:
模板的例子:
{% if user_type == "anonymous" %}
<!-- display anonymous sidemenu here -->
{% elif user_type == "landlord" %}
<!-- display landlord sidemenu here -->
{% endif %}
<-- Here is the same content for all user types -->
你有什么建议吗?另一种模式提出?
检查this answer讨论user.is_authenticated
。您也可以在视图中查看以查看用户是谁(see here)并相应地修改发送到模板的上下文。另一个选择是修改你的视图,以简单地显示不同类型的用户不同的模板。
很多方法来完成这一点,不知道是否有一个“正确的”。
你的评论让我意识到,这正是auth
包的Groups特征是。您可以将用户分配到组,查询他们是否是该组的成员,然后根据该组来显示内容。我很抱歉,我没有时间写出示例代码,但有tons of stuff here on SO about it;希望这对你来说是一个很好的起点。
谢谢。在我的情况下,知道用户是否认证是不够的,我需要知道用户类型(将链接到我的数据库中的用户)。我想避免制作太多模板,因为内容完全相同,只是旁边的菜单有所不同。 –
@DavidD。 - 根据您的回复添加了一些内容。希望有所帮助! – eykanal
我不知道它是不错的风格。但是你可以在你的模板中使用
{% include user_type_sidemenu_template with arg1=... %}
并为sidemenu每个user_type
提供不同的模板。然后,您可以将模板变量user_type_sidemenu_template
设置为您视图中相应的模板名称。
非常感谢您提高模板中的语法。 –
实际上,由于arg1已经被设置在视图中,因此不需要添加'with arg1 = ...' –
这可能取决于确切的区别。如果差异仅在模板中,则将其修复在模板中,或为每个用户提供不同的模板。如果有更多的差异,请尽早做。 – RemcoGerlich
@RemcoGerlich它只在模板中。我想这种模式应该没问题。 –