如何将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的值。
非常感谢任何指针。谢谢。凯文
答案 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