gpt4 book ai didi

Django - 为什么我应该使用 render_to_response?

转载 作者:行者123 更新时间:2023-12-03 11:36:55 24 4
gpt4 key购买 nike

考虑一下:

return render(request, 'index.html', {..context..})
return render_to_response('index.html', {..context..})

一方面, render更干净,更pythonic。另一方面,您使用 request作为您的第一个论点,我认为这是多余且令人困惑的。所以我开始想知道更大的差异......

根据 the docs :

render() is the same as a call to render_to_response() with a context_instance argument that forces the use of a RequestContext.



所以区别仅在于使用RequestContext。那么 RequestContext 有什么重要的呢?让我们看看 docs again :

a special Context class [...] acts slightly differently than the normal django.template.Context. The first difference is that it takes an HttpRequest as its first argument.



好的。这根本不重要

The second difference is that it automatically populates the context with a few variables, according to your TEMPLATE_CONTEXT_PROCESSORS setting [...] In addition to these, RequestContext always uses django.core.context_processors.csrf [...] it is deliberately hardcoded in and cannot be turned off by the TEMPLATE_CONTEXT_PROCESSORS setting.



所以这是重要的部分 - 确保所有上下文处理器正常工作,重点是 csrf。真的,回到我的第一个例子,这些实际上是一样的:
return render(request, 'index.html', {...})
return render_to_response('index.html', {...}, context_instance=RequestContext(request))

现在,第二个例子显然要糟糕得多,整个事情似乎过于复杂。所以我的大问题是 为什么使用 render_to_response根本?为什么不弃用它?

想到的其他问题:
  • 没有更好的方法来强制执行 RequestContext作为默认?
  • 有没有办法避免通过request作为论据?这是非常多余的。我找到了 a blog post展示如何将 render_to_response 变成一个易于使用的装饰器。我们不能用 render 做类似的事情吗? ?
  • 有没有考虑过这个问题(如果它是一个问题的话)?我在 future deprecation timeline 中什么也没看到.我觉得这特别令人困惑,考虑到 render来自 django 1.3 specifically to address the problems with render_to_response ,还有 everyone agrees you shouldn't use render_to_response

  • 我知道这似乎有点离题,但我希望得到可以解释原因的答案 render_to_response留下来和/或使用 render_to_response 的用例示例将优先于 render (如果有的话)

    最佳答案

    大多数应用程序使用 render_to_response因为它是从一开始直到 Django 1.3 的默认推荐选项。两者并存的原因是历史的,弃用的render_to_response会强制重写大量代码,这在次要版本中是不礼貌的。然而in this django-developer thread他们说有可能包括在 2.0 的弃用时间表中。

    这是 Russell Keith-Magee 的引述,Django 的核心开发者之一。 Keith-Magee 回答了 Jacob Kaplan-Moss 提出的问题,Jacob Kaplan-Moss 是另一位 Django 贡献者,他提出了弃用问题 render_to_response :

    I think we should deprecate render_to_response() in favor of render(). render_to_response() is just render(request=None, ...), right? Any reason to keep both around? There's no particular reason to keep both around, other than the code churn that deprecation would entail.



    基思-马吉回答说:

    This is something that I have no problem deprecating on the 2.0 schedule, but migrating every use of render_to_response() over the next 18 months/2 releases seems like an extreme measure to enforce on the entire user base when maintaining render_to_response() doesn't take any real effort.



    没有人讨论过这种弃用,但我想您的问题的答案是:没有技术原因,只是他们不想在次要(至少不是主要)版本中强制更新所有代码库。

    关于Django - 为什么我应该使用 render_to_response?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21371005/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com