Вышеупомянутые решения верны, но есть еще один момент, который нельзя забывать: содержимое app.config было таким же, как и вышеупомянутые решения.
Но это хорошая идея проверить если он обновлен. В моем случае Newtonsoft.JSON (v.6.0.4) зависеть от другого пакета.
Есть два варианта:
И последний совет, если вы работаете с несколькими проектами, например. exe-dll и проверить обе версии, если есть Newtonsoft.JSON.
blockquote>
В более общем смысле отсутствия необходимости явно устанавливать переменные в каждом представлении, это звучит так, как будто вы хотите посмотреть на написание собственного контекстного процессора .
Из документов:
У контекстного процессора очень простой интерфейс: это просто функция Python, которая принимает один аргумент, объект HttpRequest и возвращает словарь, который добавляется в контекст шаблона. , Каждый контекстный процессор должен возвращать словарь.
нет необходимости писать контекстный процессор для объекта пользователя, если у вас уже есть "django.core.context_processors.auth"
в TEMPLATE_CONTEXT_PROCESSORS
и , если вы используете RequestContext
в своих представлениях.
если вы используете django 1.4 или более позднюю версию, модуль был перемещен в django.contrib.auth.context_processors.auth
Если вы можете подключить свою аутентификацию к схеме аутентификации Django , вы сможете использовать request.user
.
Я думаю, что это просто случай вызова authenticate()
и login()
на основе содержимого вашего Cookie.
Редактировать: @Staale - я всегда использую трюк locals()
для своего контекста, чтобы все мои шаблоны могли видеть request
и т. Д. request.user
. Если нет, то я думаю, это было бы не так просто.
@Dave Чтобы использовать {{user.username}} в моих шаблонах, мне нужно будет использовать requestcontext, а не просто карту нормалей / хэш: http://www.djangoproject.com/documentation/templates_python / # subclassing-context-requestcontext
Так что я думаю, что нет глобальных переменных, которые проверяет движок шаблонов.
Но в RequestContext есть несколько классов, которые можно заранее заполнить, чтобы я мог решить свои проблемы. Спасибо.
это возможно по умолчанию, выполнив следующие шаги, убедитесь, что вы добавили контекст «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
Подсказки есть в каждом ответе, но, опять же, «с нуля», для новичков:
данные аутентификации в шаблонах (почти) по умолчанию - с небольшим фокусом:
в 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 не используется.
@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 }}