如何在TemplateTag中获取request.user

时间:2010-11-03 10:28:41

标签: django django-templates

如何将request.user的值输入TemplateTag?

在文件myproject / news / templatetags / news_tags.py中我有:

from django import template
from myproject.news.buildnews import BuildNewsList
from django.contrib.auth.models import User
from django import http
from django.contrib import admin
from django.template import RequestContext

register = template.Library()

def news_now (context):
    #who = request.user  ## this doesn't work
    news = BuildNewsList()
    entries = news.buildnewslist()
    return {'entries': entries, 'who': who, }

register.inclusion_tag('news_list.html', takes_context=True)(news_now)

另外我有一个文件news_list.html,整体模板标签有效。我只是无法在此模板标签中提取request.user的值。

非常感谢任何指针。谢谢。凯文

4 个答案:

答案 0 :(得分:12)

......它看起来像这样:

 u = context['request'].user

答案 1 :(得分:2)

您的django.core.context_processors.request中有settings.CONTEXT_PROCESSORS吗?如果是这样,请将标记的第一个参数作为请求对象,然后就可以了。

答案 2 :(得分:1)

如果该标记为takes_context,则在将 django.core.context_processors.request 添加到settings.CONTEXT_PROCESSORS之后,将有上下文['request']。用户可用。

此外,在将 django.contrib.auth.context_processors.auth 添加到settings.CONTEXT_PROCESSORS后,会有上下文['user']。

答案 3 :(得分:0)

只是对解决方案的描述稍微清楚一点。

在您的设置模块中,设置(或创建)CONTEXT_PROCESSORS变量,如下所示:

CONTEXT_PROCESSORS  = (
    'django.contrib.auth.context_processors.auth'
)

然后在您的视图模板中,您可以简单地使用      {{user.username}} 引用您当前登录的用户对象。

这是有效的,因为django.contrib.auth.context_processors.auth模块将“用户”变量添加到上下文字典中。这几乎相当于:

ReqCon = RequestContext(Request, {'user' : Request.user})
html = t.render(ReqCon)
return HttpResponse(html)

参见SO thread:Always including the user in the django template context