ошибка подписки yourlabs - поймал VariableDoesNotExist во время рендеринга - PullRequest
2 голосов
/ 24 декабря 2011

Я пытался использовать обновленный пример подписки yourlabs, и установка работала нормально, за исключением того, что

  • Каждое из представлений в приложении подписки возвращает переменную запроса в представлении в шаблон.

  • эта request context переменная не получена в шаблоне, и в результате я получаю следующую ошибку

    Caught VariableDoesNotExist while rendering: Failed lookup for key [request] in u

Так как это возвращается в каждом представлении, я не могу решить эту проблему, внеся некоторые изменения в конкретный шаблон

1 Ответ

2 голосов
/ 07 января 2012

Это происходит потому, что request не находится в контексте вашего шаблона, и шаблон использует некоторый код шаблона, который ожидал его там.Этот код (например, пользовательский тег шаблона) должен лучше обрабатывать VariableDoesNotExist

Кроме того, ваши взгляды, вероятно, не должны явно возвращать request в каждом ответе.Позвольте Django обработать это для вас.

Для этого добавьте процессор контекста шаблона запроса *1011*, который поставляется с Django, к вашему TEMPLATE_CONTEXT_PROCESSORS:

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

Если вы уже используете этот процессор контекста шаблона, убедитесь, что render_to_response вызывается с context_instance=RequestContext(request) в качестве последнего аргумента (приведенный ниже пример взят из docs ):

def some_view(request):
# ...
return render_to_response('my_template.html',
                          my_data_dictionary,
                          context_instance=RequestContext(request))

Это гарантирует, что все запросы, возвращаемые процессорами контекста шаблона в TEMPLATE_CONTEXT_PROCESSORS, будут переданы в шаблон.

Вы также можете использовать render ярлык , который будетавтоматически отображать шаблон с экземпляром Requestcontext.

Еще одна опция, добавленная в Django 1.3, - это TemplateResponse, которая также будет использовать экземпляр RequestContext.

...