1

我有一些代码可以获取当前登录的用户。

userID = request.session.get("_auth_user_id")
    if userID:
        loggedin_user = User.objects.get(pk=int(userID))
    else:
        loggedin_user = None

我希望用户名显示在每个页面上。

目前我将代码放在每个视图中并将用户对象传递给每个模板

return render_to_response('index.html', {loggedin_user})

这似乎违背了 django 的 DRY 伦理。我如何通过重复自己来做到这一点?

编辑:也许用户是一个坏例子。

如果我想从数据库中获取对象列表怎么办?

items = Item.objects.all()

并在每一页上列出它们。

我是否必须编写该代码并将列表传递给每个视图中的模板。或者我可以编写一些代码使该列表可用于所有模板吗?

4

3 回答 3

3

用户 ID 已存在于会话中。因此,您无需继续传递它。

{{ request.session._auth_user_id }}

这应该可以,但是您需要将其添加到设置文件的 TEMPLATE_CONTEXT_PROCESSORS 中:

django.core.context_processors.request

在您的 render_to_response 中,您需要将请求添加为参数。例如:

 return render_to_response('test.html',{}, context_instance=RequestContext(request))
于 2009-07-07T09:39:47.377 回答
1

request.user 呢?

if request.user.is_authenticated():
    name = request.user.username
else:
    name = "Anonymous"

无论如何,如果它在 django 中不可用,我建议你编写一个中间件类,就像 django.contrib.sessions.middleware.SessionMiddleware 或 django.contrib.auth.middleware.AuthenticationMiddleware 一样。该类会在将请求详细信息发送到视图之前对其进行更改。

如果您需要在每个视图的基础上使用它,您可以编写一个装饰器来做那一点点,然后 @decorator 您想要的视图。

于 2009-07-07T10:38:26.917 回答
1

您应该为类似的事情使用自定义模板标签。您可以在自定义标签中获取您需要的数据,并将其发送到模板。您需要记住的只是将标签加载到您将要使用它的模板文件中。

于 2009-07-07T21:16:17.103 回答