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))
And
return direct_to_template(request, template_name, my_data_dictionary)
有什么不同,在特定情况下用什么?
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编辑:值得注意的是,render_to_response()在Django 3.0中被删除了
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是我在我的视图中使用的通用视图(而不是在我的url中),因为像新的render()函数一样,它自动使用RequestContext及其所有的context_processors。
但是应该避免使用direct_to_template,因为不赞成使用基于函数的泛型视图。要么使用渲染,要么使用实际的类,参见https://docs.djangoproject.com/en/1.3/topics/generic-views-migration/
我很高兴我很久很久没有输入RequestContext了。