关于python:在每个视图中渲染公共会话信息

Rendering common session information in every view

我想输出一些依赖于Django中会话数据的信息。让我们以"登录" /"登录为|注销"片段为例。这取决于我的request.session['user']

当然,我每次渲染页面时都可以在上下文中放置一个用户对象,然后打开{% if user %},但这似乎打破了DRY的想法-我必须在每个视图的每个上下文中添加用户。铅>

如何提取这样的片段并使之更常见?


使用模板继承从一个适当使用上下文公共部分的公共库中派生所有模板,并使用工厂函数创建所有上下文,以确保将这些公共部分插入到它们中。


您可能希望使用包含逻辑的上下文处理器,并将其放入可以在任何页面中使用的变量,而无需将其添加到每个调用中。

请参阅如何将公共词典数据传递到django中的每个页面的更多信息


您是否要使网站的某些区域仅在登录后才能访问?还是特定页面的某些区域?

如果要阻止对整个URL的访问,可以在视图中的函数中使用@login_required装饰器来阻止某些访问。另外,您可以使用include将需要用户登录的站点的公共部分保留在包含的单独的html中,这样,您只需编写一次if语句。