Django 如何在TemplateTag中获取request.user
如何将request.user的值输入TemplateTag 在文件myproject/news/templatetags/news_tags.py中,我有:Django 如何在TemplateTag中获取request.user,django,django-templates,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 imp
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,templatetag可以正常工作。我只是无法在此templatetag中提取request.user的值
如果有任何指点,我将不胜感激。谢谢Kevin您的
设置中是否有django.core.context\u处理器。请求?如果是这样,请将第一个参数添加到标记请求对象,然后就可以了。如果标记采用上下文
,那么在将django.core.context\u processors.request添加到settings.context\u processors之后,将有上下文['request'],用户可用
此外,在将django.contrib.auth.context\u processors.auth添加到settings.context\u processors之后,将出现context['user'.。。。它可能是这样的:
u = context['request'].user
只是为了更清楚地描述解决方案
在设置模块中,设置(或创建)上下文处理器变量,如下所示:
CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth'
)
然后在视图模板中,您可以简单地使用
{{user.username}}
以引用当前登录的用户对象
这是因为django.contrib.auth.context_processors.auth模块将“user”变量添加到上下文字典中。这几乎相当于:
ReqCon = RequestContext(Request, {'user' : Request.user})
html = t.render(ReqCon)
return HttpResponse(html)
见SO线程: