Джанго: Как написать имя текущего пользователя из каждого представления (Джанго) - PullRequest
6 голосов
/ 28 июня 2009

Пишу небольшое социальное приложение. Одной из особенностей является запись имени пользователя в шапке сайта. Например, если я вошел в систему и меня зовут Олег (имя пользователя), то я должен увидеть:

Привет, Олег | Нажмите для редактирования профиля

В противном случае я должен увидеть что-то вроде:

Здравствуйте. Пожалуйста, зарегистрируйтесь или присоединитесь

Я хочу показать это на каждой странице моего сайта. Очевидное решение - передать объект request.user в каждый просмотр моего сайта. Но здесь http://www.willmer.com/kb/category/django/ Я прочитал, что я могу просто получить доступ к объекту запроса из любого шаблона, просто включив:

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.core.context_processors.request',
)

Не знаю почему, но на самом деле это не сработало: (

Может быть, кто-то может мне помочь и предложить решение?

Большое спасибо,

Олег

Ответы [ 6 ]

7 голосов
/ 29 июня 2009

Также обратите внимание, что вы должны использовать django.core.context_processors.auth вместо django.core.context_processors.request, если вам не нужен весь контекст запроса. Тогда вы можете просто набрать:

Hello {{ user.get_full_name }}

в вашем шаблоне.

Не забудьте передать context_instance=RequestContext(request) при вызове render_to_response (или использовать direct_to_template ).

6 голосов
/ 29 июня 2009

Здесь, вероятно, есть две проблемы.

Во-первых, если вы переопределите TEMPLATE_CONTEXT_PROCESSORS, как вы сделали, вы переопределите значение по умолчанию, что, вероятно, не очень хорошая идея. По умолчанию этот параметр уже включает процессор auth, который в любом случае дает переменную user. Если вам определенно нужен request, вы должны сделать это (обратите внимание на +=):

TEMPLATE_CONTEXT_PROCESSORS += (
    'django.core.context_processors.request',
)

Во-вторых, как описано в документации здесь при использовании контекстных процессоров, вы должны убедиться, что вы используете RequestContext в своем шаблоне. Если вы используете render_to_response, вы должны сделать это так:

return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))
1 голос
/ 28 июня 2009

Использование

из django.template import RequestContext

вместо

из контекста импорта django.template

Так что теперь просто вызовите RequestContext (запрос, контекст)

Подробнее здесь .

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

Я думаю, что просто добавив locals(), можно решить проблему.

return render_to_response('my_template.html',
                      my_data_dictionary,locals())
0 голосов
/ 02 марта 2012
{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
<p>Welcome, new user. Please log in.</p>
{% endif %}

Было бы достаточно, если у вас уже установлен TEMPLATE_CONTEXT_PROCESSORS.

0 голосов
/ 28 июня 2009

После настройки процесса контекста запрос передается в шаблон как переменная с именем request. Чтобы получить доступ к пользовательскому объекту внутри переменной, в которую необходимо перейти:

{{ request.user }}

Вот список атрибутов, хранящихся в объекте запроса Django . Более конкретно, вот атрибут пользователя .

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