【问题标题】:HttpResponse vs. RenderHttpResponse 与渲染
【发布时间】:2011-09-04 20:40:04
【问题描述】:

我正在查看一些代码并提出了这个问题——Django: What is the difference b/w HttpResponse vs HttpResponseRedirect vs render_to_response——它讨论了不同类型的请求响应。

有没有理由使用HttpResponse 而不是render?如果是这样,这样做的用例和优势是什么?谢谢。

【问题讨论】:

  • Abid 覆盖了它,render 通常用于加载模板和上下文,而HttpResponse 通常用于加载数据。因为用 html “响应”是不好的做法。 Render本质上是HttpResponse的缩写,它提供了一种更有效的方式来修改模板,动态加载数据。

标签: django http


【解决方案1】:

render 用于名称已经表明的内容:渲染模板文件(主要是 HTML,但可以是任何格式)。 render 基本上是围绕 HttpResponse 呈现模板的简单包装,尽管如上一个答案中所述,您可以使用 HttpResponse 在响应中返回其他内容,而不仅仅是呈现模板。

【讨论】:

  • 我希望你能多解释一点,那就太好了。
  • 嗯,答案大多已经说了。 Django 正在使用模板(模板文件,例如 html 模板)。 render 快捷方式将模板名称作为参数,然后使用给定参数渲染此模板,然后返回带有渲染主体的HttpResponseHttpResponse 就像名称所指的那样,处理 HTTP 响应。它不会在调用 render 时执行 Django 在幕后所做的事情,如果您想返回渲染的 Django 模板,您需要手动执行此操作并将结果传递给HttpResponse,然后再返回。
  • 感谢您的宝贵时间。
【解决方案2】:

这是渲染的参数。它接受模板(模板名称)并与给定的上下文字典结合,并返回一个带有渲染文本的 HttpResponse 对象。

render(request, template_name, context=None, content_type=None, status=None, using=None)

即使渲染返回 HttpResponse 但它可以使用上下文渲染模板(如果字典中的值是可调用的,则视图将在渲染模板之前调用它。)

#With render
def view_page(request):
    # View code here...
    return render(request, 'app/index.html', {
        'value': 'data',
    }, content_type='application/xhtml+xml')

#with HttpResponse
def view_page(request):
    # View code here...
    t = loader.get_template('app/index.html')
    c = {'value': 'data'}
    return HttpResponse(t.render(c, request), content_type='application/xhtml+xml')

在下面的 HttpResponse 中,我们首先加载模板,然后使用上下文渲染它并发送响应。所以使用 render 很容易,因为它接受参数作为 template_name 和 context 并在内部将它们组合起来。 render 由 django.shortcuts 导入

【讨论】:

    【解决方案3】:

    当然,假设您正在进行 AJAX 调用并希望返回一个 JSON 对象:

    return HttpResponse(jsonObj, mimetype='application/json')
    

    原始问题中接受的答案暗示了这种方法。

    【讨论】:

      猜你喜欢
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      相关资源
      最近更新 更多