【问题标题】:yourlabs-subscription error -- Caught VariableDoesNotExist while renderingyourlabs-subscription 错误——渲染时捕获 VariableDoesNotExist
【发布时间】:2011-12-24 16:17:38
【问题描述】:

我一直在尝试使用更新后的 yourlabs 订阅示例,并且安装工作正常,除了

  • 订阅应用中的每个视图都将渲染中的请求变量返回到模板。

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

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

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

【问题讨论】:

  • yourlabs-subscription 中的视图使用shortcuts.render 并且不在上下文中传递请求对象。它将请求对象传递给 django.shortcut.render 以便它可以运行上下文处理器。 django.core.context_processors.request 是在上下文中设置请求的上下文处理器。

标签: django subscription django-apps


【解决方案1】:

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

此外,您的视图可能不应该在每个响应中明确返回request。让 Django 为您处理。

为此,请将 Django 附带的 request template context processor 添加到您的 TEMPLATE_CONTEXT_PROCESSORS

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

如果您已经在使用此模板上下文处理器,请确保以 context_instance=RequestContext(request) 作为最后一个参数调用 render_to_response(以下示例来自 docs):

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

这可确保TEMPLATE_CONTEXT_PROCESSORS 中模板上下文处理器返回的所有字典都传递给模板。

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

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

【讨论】:

  • 渲染快捷方式 yourlabs-subscription 视图使用的。
猜你喜欢
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 1970-01-01
  • 2014-10-14
  • 2023-01-05
  • 2016-04-22
  • 2013-05-12
  • 1970-01-01
相关资源
最近更新 更多