Django - render()、render_to_response() 和 direct_to_template() 有什么区别?

8 浏览
0 Comments

Django - render()、render_to_response() 和 direct_to_template() 有什么区别?

什么是render()render_to_response()direct_to_template()之间的区别(对于Python/Django新手来说)?

例如,在Nathan Borror的基本应用示例中

def comment_edit(request, object_id, template_name='comments/edit.html'):
    comment = get_object_or_404(Comment, pk=object_id, user=request.user)
    # ...
    return render(request, template_name, {
        'form': form,
        'comment': comment,
    })

但我也看到过

    return render_to_response(template_name, my_data_dictionary,
              context_instance=RequestContext(request))

以及

    return direct_to_template(request, template_name, my_data_dictionary)

它们的区别是什么,在任何特定情况下应该使用哪一种?

admin 更改状态以发布 2023年5月22日
0
0 Comments

重新表述Yuri,Fábio和Frost对于Django新手(即我)的回答-几乎肯定是一个简化,但是一个很好的起点?

  • render_to_response()是“原始”的,但几乎所有情况下都需要您放置context_instance = RequestContext(request),这很麻烦。

  • direct_to_template()旨在仅在urls.py中使用,而无需在views.py中定义视图,但是可以在views.py中使用,以避免键入RequestContext

  • render()render_to_response()的快捷方式,自动提供context_instance = Request....它在django开发版本(1.2.1)中可用,但是许多人都创建了自己的快捷方式,例如这个这个,或最初让我困惑的Nathans basic.tools.shortcuts.py

0
0 Comments

https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#render

render(request, template[, dictionary][, context_instance][, content_type][, status][, current_app])

render()是一个全新的快捷方式,用于1.3版本的render_to_response,它将自动使用RequestContext,我从现在开始一定会使用它。


2020年 EDIT:应注意,在Django 3.0中删除了render_to_response()

https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#render-to-response

render_to_response(template[, dictionary][, context_instance][, mimetype])¶

render_to_response是常用于教程等的标准渲染函数。要使用RequestContext,您必须指定context_instance=RequestContext(request)


https://docs.djangoproject.com/en/1.8/ref/generic-views/#django-views-generic-simple-direct-to-template

direct_to_template是一个通用视图,我在我的视图中使用它(而不是在我的urls中使用),因为像新的render()函数一样,它会自动使用RequestContext和所有它的context_processor

但是,应避免使用direct_to_template,因为函数型通用视图已被弃用。请使用render或实际的类,请参见https://docs.djangoproject.com/en/1.3/topics/generic-views-migration/

我很高兴我已经很长时间没有打过RequestContext

0