как получить request.user в TemplateTag - PullRequest
4 голосов
/ 03 ноября 2010

Как получить значение 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 в этом теге шаблона.

Буду признателен за любые указатели.Благодарю.Kevin

Ответы [ 4 ]

12 голосов
/ 02 декабря 2010

... это может выглядеть так:

 u = context['request'].user
2 голосов
/ 03 ноября 2010

У вас есть django.core.context_processors.request в вашем settings.CONTEXT_PROCESSORS? Если это так, сделайте первый аргумент тега объектом запроса, и тогда все будет в порядке.

1 голос
/ 04 ноября 2010

Если этот тег takes_context, то после добавления django.core.context_processors.request в settings.CONTEXT_PROCESSORS будет контекст ['request']. User доступен.

Более того, после добавления django.contrib.auth.context_processors.auth в settings.CONTEXT_PROCESSORS, будет контекст ['user'].

0 голосов
/ 22 января 2013

Просто чтобы немного пояснить описание решения.

В вашем модуле настроек установите (или создайте) переменную CONTEXT_PROCESSORS следующим образом:

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: Всегда включайте пользователя в контекст шаблона django

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...