2010-11-03 22 views
4

如何獲取request.user的值到TemplateTag中?如何在TemplateTag中獲取request.user

在文件的myproject /新聞/ 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和整個templatetag作品。我只是無法在此模板標籤中獲取request.user的值。

將不勝感激任何指針。謝謝。 Kevin

回答

2

您是否在settings.CONTEXT_PROCESSORS中有django.core.context_processors.request?如果是這樣,請爲標記請求對象的第一個參數,然後你應該沒問題。

+0

該訣竅。非常感謝! – Kevin 2010-11-03 10:59:58

+0

太好了。你有可能接受答案嗎? – 2010-11-03 11:12:42

1

如果該標籤的takes_context,然後加入django.core.context_processors.request到settings.CONTEXT_PROCESSORS後會有上下文[「請求」]。用戶可用。

此外,在將django.contrib.auth.context_processors.auth添加到settings.CONTEXT_PROCESSORS後,將會出現context ['user']。

11

...它可能看起來像這樣:

u = context['request'].user 
+0

這是正確的答案。 – 2014-07-31 14:50:12

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) 

看到這麼螺紋:Always including the user in the django template context