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

2024-04-26 12:49:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个导航栏,当用户没有登录时,它会显示“login”和“register”。当用户登录时,导航栏将显示用户的姓名和收件箱中的邮件数。你知道吗

问题是导航页面大约有50个页面,因此大约有50个视图函数必须获取用户信息并将其发送到模板。如果我以后想改变这个,那会很痛苦的!你知道吗

例如,下面是一个示例视图:

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

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

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

有没有更干净的方法?你知道吗

编辑:另外,我有一个UserProfile模型,我想把它发送到模板。也有办法吗?你知道吗


Tags: 函数用户register视图模板信息示例request
3条回答

最简单的方法是将django.contrib.auth.context_processors.auth包含到TEMPLATE_CONTEXT_PROCESSORS配置中。如前所述in the docs它将在模板上下文中添加一个userperms变量,使您可以直接访问当前用户。你知道吗

并不是说TEMPLATE_CONTEXT_PROCESSORS的默认配置是这样的(在Django 1.3中):

("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")

因此,上下文处理器应该已经处于活动状态,并且您应该能够访问模板中的user变量,而不必在视图中返回它。你知道吗

在视图中,您只需使用^{}快捷方式即可创建所需的RequestContext实例:

from django.shortcuts import render

def my_view(request):
    return render(request, 'template.html' )

你需要一个custom template tag。你知道吗

您可以按照DrTyrsa的建议创建一个自定义模板标记,也可以创建context processor。你知道吗

相关问题 更多 >