Всегда включать пользователя в контекст шаблона django

Вышеупомянутые решения верны, но есть еще один момент, который нельзя забывать: содержимое app.config было таким же, как и вышеупомянутые решения.



  
    
      
        
        
      
    
  

Но это хорошая идея проверить если он обновлен. В моем случае Newtonsoft.JSON (v.6.0.4) зависеть от другого пакета.

Есть два варианта:

  1. Обновление (пакет Newtonsoft.JSON) последних версий.
  2. Обновить файл app.config в номерах версий.

И последний совет, если вы работаете с несколькими проектами, например. exe-dll и проверить обе версии, если есть Newtonsoft.JSON.

blockquote>

29
задан Staale 3 September 2008 в 12:22
поделиться

7 ответов

В более общем смысле отсутствия необходимости явно устанавливать переменные в каждом представлении, это звучит так, как будто вы хотите посмотреть на написание собственного контекстного процессора .

Из документов:

У контекстного процессора очень простой интерфейс: это просто функция Python, которая принимает один аргумент, объект HttpRequest и возвращает словарь, который добавляется в контекст шаблона. , Каждый контекстный процессор должен возвращать словарь.

18
ответ дан Ryan Duffield 3 September 2008 в 12:22
поделиться

нет необходимости писать контекстный процессор для объекта пользователя, если у вас уже есть "django.core.context_processors.auth" в TEMPLATE_CONTEXT_PROCESSORS и , если вы используете RequestContext в своих представлениях.

если вы используете django 1.4 или более позднюю версию, модуль был перемещен в django.contrib.auth.context_processors.auth

43
ответ дан Daniel 3 September 2008 в 12:22
поделиться

Если вы можете подключить свою аутентификацию к схеме аутентификации Django , вы сможете использовать request.user.

Я думаю, что это просто случай вызова authenticate() и login() на основе содержимого вашего Cookie.

Редактировать: @Staale - я всегда использую трюк locals() для своего контекста, чтобы все мои шаблоны могли видеть request и т. Д. request.user. Если нет, то я думаю, это было бы не так просто.

2
ответ дан Dave Webb 3 September 2008 в 12:22
поделиться

@Dave Чтобы использовать {{user.username}} в моих шаблонах, мне нужно будет использовать requestcontext, а не просто карту нормалей / хэш: http://www.djangoproject.com/documentation/templates_python / # subclassing-context-requestcontext

Так что я думаю, что нет глобальных переменных, которые проверяет движок шаблонов.

Но в RequestContext есть несколько классов, которые можно заранее заполнить, чтобы я мог решить свои проблемы. Спасибо.

2
ответ дан Staale 3 September 2008 в 12:22
поделиться

это возможно по умолчанию, выполнив следующие шаги, убедитесь, что вы добавили контекст «django.contrib.auth.context_processors.auth» в свои настройки. По умолчанию он добавлен в settings.py, поэтому он выглядит следующим образом

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

И вы можете получить доступ к объекту пользователя, например,

{% if user.is_authenticated %}
<p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

Для получения дополнительной информации см. Здесь http://docs.djangoproject.com/en/1.2/topics/auth/#authentication-data-in-templates

1
ответ дан Anto Binish Kaspar 3 September 2008 в 12:22
поделиться

Подсказки есть в каждом ответе, но, опять же, «с нуля», для новичков:

данные аутентификации в шаблонах (почти) по умолчанию - с небольшим фокусом:

в views.py:

from django.template import RequestContext
...
def index(request):
    return render_to_response('index.html', 
                              {'var': 'value'},
                              context_instance=RequestContext(request))

в index.html:

...
Hi, {{ user.username }}
var: {{ value }}
... 

Отсюда: https://docs.djangoproject.com/en/1.4/topics / auth / # authentication-data-in-templates

Эта переменная контекста шаблона недоступна, если RequestContext не используется.

3
ответ дан iutinvg 3 September 2008 в 12:22
поделиться

@Ryan: документация о препроцессорах немного мала

@Staale: добавление пользователя в контекст каждый раз, когда вызывается шаблон, DRY

Решение - использовать препроцессор

A : в ваших настройках добавьте

TEMPLATE_CONTEXT_PROCESSORS = (
    'myapp.processor_file_name.user',
)

B : в myapp / processor_file_name.py вставьте

def user(request):
    if hasattr(request, 'user'):
        return {'user':request.user }
    return {}

Теперь вы можете использовать функциональные возможности пользовательских объектов в своих шаблонах.

{{ user.get_full_name }}
33
ответ дан zalun 3 September 2008 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: