Django:针对不同用户的1个视图?

时间:2015-06-24 14:06:05

标签: python django

在我的项目中,我想在侧边菜单和内容页面之间拆分页面。 我想显示一个与用户类型不同的侧面菜单(有5种用户类型,因此会有5个侧面菜单)。但有时,要显示的内容页面对于这5种用户类型可能是相同的。

我一直在寻找"模式"为了解决这个问题,我想到了一个,但从未在另一个项目中看到它。我希望你告诉我这是好事还是坏事:

  • 所有用户类型的URI(例如/ myapp / display_home)
  • 在views.py中,所有用户类型都有1个视图。在视图中,我尝试知道用户是否已登录,然后我们正在处理哪种类型的用户。然后,重定向到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 -->

你有什么建议吗?提出另一种模式?

2 个答案:

答案 0 :(得分:1)

检查this answer以获取有关user.is_authenticated的讨论。您还可以在视图中检查以查看用户是谁(see here)并相应地修改发送到模板的上下文。另一种选择是修改您的视图,以便只显示不同类型的用户不同的模板。

很多方法可以实现这一点,不确定是否有“正确”的。

您的评论让我意识到这正是auth包的Groups功能的用途。您可以将用户分配到组,查询他们是否是该组的成员,然后根据该组显示内容。我很抱歉我没有时间写出示例代码,但有tons of stuff here on SO about it;希望这对你来说是一个很好的起点。

答案 1 :(得分:1)

我不知道它是不是好风格。但你可以使用

{% include user_type_sidemenu_template with arg1=... %}

在您的模板中,为每个user_type的侧面菜单提供不同的模板。然后,您可以将模板变量user_type_sidemenu_template设置为视图中的相应模板名称。