¿Cuál es la diferencia (en el lenguaje una pitón / django novato puede entender) en una vista entre render()
, render_to_response()
y direct_to_template()
?
por ejemplo, de los ejemplos de aplicaciones básicas de 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,
})
Pero también he visto
return render_to_response(template_name, my_data_dictionary,
context_instance=RequestContext(request))
Y
return direct_to_template(request, template_name, my_data_dictionary)
¿Cuál es la diferencia, qué usar en una situación particular?
render()
está disponible desde 1.3.Reformulando las respuestas de Yuri, Fábio y Frosts para el novato de Django (es decir, yo), casi con toda seguridad una simplificación, pero ¿un buen punto de partida?
render_to_response()
es el "original", pero requiere que pongacontext_instance=RequestContext(request)
casi todo el tiempo un PITAdirect_to_template()
está diseñado para usarse solo en urls.py sin una vista definida en views.py pero puede usarse en views.py para evitar tener que escribir RequestContextrender()
es un acceso directorender_to_response()
que automáticamente proporcionacontext_instance=Request
... Está disponible en la versión de desarrollo de django (1.2.1) pero muchos han creado sus propios accesos directos como este , este o el que me lanzó inicialmente, Nathans basic.tools. atajos.pyfuente
Render es
Entonces, realmente no hay diferencia entre,
render_to_response
excepto que envuelve su contexto haciendo que los preprocesadores de plantilla funcionen.Directo a la plantilla es una vista genérica .
Realmente no tiene sentido usarlo aquí porque hay una sobrecarga
render_to_response
en forma de función de vista.fuente
De django docs :
direct_to_template
Es algo diferente. Es una vista genérica que usa un diccionario de datos para representar el html sin la necesidad de views.py, lo usa en urls.py. Documentos aquífuente
Solo una nota que no pude encontrar en las respuestas anteriores. En este código:
¿Qué
context_instance
hace realmente el tercer parámetro ? Al ser RequestContext , establece un contexto básico que luego se agregauser_context
. Entonces la plantilla obtiene este contexto extendido. Las variables que se agregan están dadasTEMPLATE_CONTEXT_PROCESSORS
en settings.py. Por ejemplo, django.contrib.auth.context_processors.auth agrega variablesuser
y variablesperm
que luego son accesibles en la plantilla.fuente