yourlabs-subscription错误 - 渲染时捕获VariableDoesNotExist

时间:2011-12-24 16:17:39

标签: django subscription django-apps

我一直在尝试使用更新的yourlabs订阅示例,除了

之外,安装工作正常
  • 订阅应用程序中的每个视图都会将渲染中的请求变量返回给模板。

  • 模板中未收到此request context变量,因此我收到以下错误

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

由于在每个视图中都会返回,因此我无法通过在特定模板中进行一些调整来解决此问题

1 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为request不在模板的上下文中,并且模板正在使用一些期望它存在的模板代码。该代码(例如自定义模板代码)应该better handle VariableDoesNotExist

此外,您的观点可能不应明确地在每个响应中返回request。让Django为你处理这个问题。

为此,请将Django随附的request template context processor添加到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中模板上下文处理器返回的所有dicts都传递给模板。

您还可以使用rendershortcut,它会自动使用Requestcontext的实例呈现模板。

Django 1.3中添加的另一个选项是TemplateResponse,它还将使用RequestContext的实例。