包括多个视图的用户统计信息

时间:2011-12-29 09:43:45

标签: python django

我有一个导航栏,当用户未登录时显示“登录”和“注册”。当用户登录时,导航栏将显示用户的姓名和他收件箱中的邮件数量

问题是导航页面大约有50页,因此大约有50个视图函数需要获取用户信息并将其发送到模板。如果我想稍后改变它,那将是一种痛苦!

例如,这是一个示例视图:

def index(request):
  user = request.user
  ...
  return render_to_response("page.html", {'user': user})

我必须每次使用导航栏将有关用户的信息发送到任何页面,因为我的导航栏包含代码:

{% if user %}
...
{% else %}
....
{% endif %}

有更简洁的方法吗?

编辑:此外,我有一个UserProfile模型,我想将其发送到模板。有没有办法做到这一点?

4 个答案:

答案 0 :(得分:2)

您可以像DrTyrsa建议的那样创建自定义模板标记,也可以创建context processor

答案 1 :(得分:2)

最简单的方法是将django.contrib.auth.context_processors.auth包含在TEMPLATE_CONTEXT_PROCESSORS的{​​{1}}配置中。如上所述in the docs,它会在您的模板上下文中添加settings.pyuser变量,以便您直接访问当前用户。

perms的默认配置不是这个(在Django 1.3中):

TEMPLATE_CONTEXT_PROCESSORS

因此,上下文处理器应该已处于活动状态,您应该能够访问模板中的("django.contrib.auth.context_processors.auth", "django.core.context_processors.debug", "django.core.context_processors.i18n", "django.core.context_processors.media", "django.core.context_processors.static", "django.contrib.messages.context_processors.messages") 变量,而无需在视图中返回它。

在您的视图中,您只需使用render快捷方式,该快捷方式将负责创建所需的RequestContext实例:

user

答案 2 :(得分:0)

你需要custom template tag

答案 3 :(得分:0)

为什么您需要将用户发送到每个视图,HttpRequest包含用户,您可以在登录时轻松地在模板中访问它。

另一种解决方案是,将用户保存在sessions中,并在任何视图或模板中访问它。