render_to_response всегда передает переменную
-
19-09-2019 - |
Вопрос
Я обнаружил, что всегда передаю переменную «пользователь» при каждом вызове render_to_response
Многие мои рендеры выглядят вот так
return render_to_response('some/template', {'my':context,'user':user})
Есть ли способ автоматически отправлять эту «пользовательскую» переменную без добавления ее вручную в контекст каждый раз при вызове метода?
Решение
Сначала прочтите этот.Затем:
def some_view(request):
# ...
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
Другие советы
Да, вы можете сделать это с помощью контекстных процессоров: http://docs.djangoproject.com/en/dev/ref/templates/api/#id1
Фактически, если вы включите DJANGO.CORE.CONTEXT_PROCESSORS.AUTH в свои контекстные процессоры, пользователь будет добавлен в каждый объект запроса.http://docs.djangoproject.com/en/dev/ref/templates/api/#django-core-context-processors-auth
Вам нужно будет использовать context_instance=RequestContext(request)
как уже упоминали другие, об использовании контекстных процессоров.
Возможно, вы захотите посмотреть render_to
, который является частью django-annoying, который позволяет вам делать такие вещи:
@render_to('template.html')
def foo(request):
bar = Bar.object.all()
return {'bar': bar}
# equals to
def foo(request):
bar = Bar.object.all()
return render_to_response('template.html',
{'bar': bar},
context_instance=RequestContext(request))
Вы можете написать аналогичный декоратор (например. render_with_user_to
), на этом вы закончите.
Дмитрий прав, но вы можете еще больше упростить это, используя Direct_to_template общий вид как обычная функция.Исходный код для него здесь.
Также есть приятное дополнение django-annoying
, что обеспечивает render_to декоратор делает то же самое, но без необходимости явного рендеринга шаблона.