Вопрос

Я обнаружил, что всегда передаю переменную «пользователь» при каждом вызове 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 декоратор делает то же самое, но без необходимости явного рендеринга шаблона.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top