2010-11-03 7 views
4

Comment obtient-on la valeur de request.user dans un TemplateTag?comment obtenir request.user dans un TemplateTag

Dans le fichier myproject/nouvelles/templatetags/news_tags.py je:

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) 

séparément J'ai un news_list.html de fichiers et dans l'ensemble des travaux de templatetag. Je n'ai tout simplement pas réussi à extraire la valeur de request.user dans ce template.

Apprécierait n'importe quel pointeur. Merci. Kevin

Répondre

2

Avez-vous django.core.context_processors.request dans votre settings.CONTEXT_PROCESSORS? Si c'est le cas, faites le premier argument à l'étiquette de l'objet de la demande, puis vous devriez aller bien.

+0

qui a fait l'affaire. Merci beaucoup! – Kevin

+0

Génial. Avez-vous une chance d'accepter la réponse? –

1

Si cette balise takes_context, puis après avoir ajouté django.core.context_processors.request à settings.CONTEXT_PROCESSORS il y aura contexte [ « demande »] utilisateur. Disponibles.

De plus, après avoir ajouté django.contrib.auth.context_processors.auth à settings.CONTEXT_PROCESSORS, il y aura le contexte ['user'].

11

... il pourrait ressembler à ceci:

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

C'est la bonne réponse. –

0

juste être un peu plus clair sur la description de la solution.

Dans votre module de paramètres, définissez (ou créer) la variable CONTEXT_PROCESSORS comme ceci:

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

ensuite dans vos modèles de vue, vous pouvez simplement utiliser {{user.username}} se référer à votre objet utilisateur actuellement connecté.

Cela fonctionne parce que le module django.contrib.auth.context_processors.auth ajoute la variable 'user' au dictionnaire de contexte. Ceci est presque équivalent à:

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

Voir Thread: Always including the user in the django template context