如何在Django 1.8中的render_to_response中使用RequestContexts

时间:2015-04-07 20:28:58

标签: django django-templates django-views

我理解Django 1.8中的内容已经改变了render_to_response 接受争论。我有很多观点,到处都使用这种模式:

  

...返回render_to_response(模板,上下文,   context_instance = MyRequestContext(请求))

MyRequestContext扩展了RequestContext并添加了我在模板中总是使用的一些参数。

现在这已不再适用,并且模板中不再可以访问MyRequestContext中的值。

那么如何在Django 1.8中使用RequestContext?我需要他们+一些上下文传递给我的所有模板。

/ J

- 编辑 -

感谢您的所有答案,正如您指出这应该有效 ...

我最终重写并替换了我之前的RequestContext子类 - > MyRequestContext w。执行单独的ContextProcessors函数并将其添加到我的OPTIONS:context_processors列表中,然后在我的所有视图中使用正常的RequestContext(请求)。不知道我在旧解决方案中遇到了什么错误/问题,但现在可行。再次 - 感谢您的灵感和回应。

2 个答案:

答案 0 :(得分:0)

您可以手动获取模板并将其呈现给HttpResponse对象:

from django.template.loader import get_template
from django.http import HttpResponse

template = get_template(template_name)
context = MyRequestContext(request, context_dict)
return HttpResponse(template.render(context))

答案 1 :(得分:0)

我也碰到了这个问题,不得不多次阅读render_to_response上的文档。

让我感到困惑的是示例代码与弃用警告的结合:

return render_to_response('my_template.html',
    my_context,
    context_instance=RequestContext(request))
  

自1.8版以来不推荐使用:context_instance参数是   弃用。只需使用上下文。

请注意,context_instance仍然在文档中的许多示例中使用,可以直接使用它直到Django 2.我不想等到我被迫改变当我升级时...

我将my_context dict从render_to_response中移出到RequestContext类中。我相信这一定是新风格:

return render_to_response('template.html', 
    context=RequestContext(request, my_context))

上下文是第二个参数,所以你甚至不必命名它:

return render_to_response('template.html', 
     RequestContext(request, my_context))