在Django中设计访问级别感知视图

在Django中设计访问级别感知视图,django,django-templates,django-views,access-levels,Django,Django Templates,Django Views,Access Levels,当在一个网站上创建一个页面,根据用户的不同显示不同的信息时,最优雅的设计是什么?我想到了一些可能性: 将所有数据连同一个变量一起传递给模板,该变量说明用户拥有何种权限,并让模板根据该权限选择显示或不显示 根据访问级别使用不同版本的模板 根据访问级别具有不同版本的视图 举个具体的例子,假设您有一个包含用户配置文件的页面。如果用户已登录,则应能看到其所有信息。如果其他用户登录,他们应该只看到该用户公开的内容。如果管理员已登录,他们应该会看到所有信息和一组管理操作按钮。版本1是最佳选择。我会通过上下文

当在一个网站上创建一个页面,根据用户的不同显示不同的信息时,最优雅的设计是什么?我想到了一些可能性:

  • 将所有数据连同一个变量一起传递给模板,该变量说明用户拥有何种权限,并让模板根据该权限选择显示或不显示

  • 根据访问级别使用不同版本的模板

  • 根据访问级别具有不同版本的视图


  • 举个具体的例子,假设您有一个包含用户配置文件的页面。如果用户已登录,则应能看到其所有信息。如果其他用户登录,他们应该只看到该用户公开的内容。如果管理员已登录,他们应该会看到所有信息和一组管理操作按钮。

    版本1是最佳选择。我会通过上下文处理器将您需要的值注入到上下文中。

    版本1非常糟糕。它将访问逻辑放在模板中,可能(意外地)暴露出您可能不想公开的内容

    您绝对不应该将所有内容都传递给模板,通过另一个变量来确定显示

    在视图中(向模板显示一个正确的对象)或模型中进行过滤

    虽然并非总是100%可行,但应该努力将业务逻辑排除在模板之外


    如果您需要根据用户的角色使用截然不同的模板,那么我会为每个角色使用单独的模板。

    我选择数字1,只是简短和简单的列举1绝对不是您应该使用的方式。出于回答中所述的原因,我否决了此答案。无需担心。这个问题很模糊,模糊的问题得到的答案也很模糊。