Quelle est la différence (dans un langage qu'un noob python / django peut comprendre) dans une vue entre render()
, render_to_response()
et direct_to_template()
?
par exemple à partir des exemples d'applications de base 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,
})
Mais j'ai aussi vu
return render_to_response(template_name, my_data_dictionary,
context_instance=RequestContext(request))
Et
return direct_to_template(request, template_name, my_data_dictionary)
Quelle est la différence, quoi utiliser dans une situation particulière?
render()
est disponible à partir de la 1.3.Reformuler les réponses de Yuri, Fábio et Frosts pour le Django noob (c'est-à-dire moi) - presque certainement une simplification, mais un bon point de départ?
render_to_response()
est "l'original", mais vous oblige à mettrecontext_instance=RequestContext(request)
presque tout le temps, un PITA.direct_to_template()
est conçu pour être utilisé uniquement dans urls.py sans une vue définie dans views.py mais il peut être utilisé dans views.py pour éviter d'avoir à taper RequestContextrender()
est un raccourcirender_to_response()
qui fournit automatiquementcontext_instance=Request
.... Il est disponible dans la version de développement de django (1.2.1) mais beaucoup ont créé leurs propres raccourcis comme celui-ci , celui-ci ou celui qui m'a lancé initialement, Nathans basic.tools. shortcuts.pyla source
Le rendu est
Il n'y a donc vraiment aucune différence,
render_to_response
sauf qu'il enveloppe votre contexte pour faire fonctionner les pré-processeurs de modèle.Direct to template est une vue générique .
Il n'y a vraiment aucun sens à l'utiliser ici car il y a des frais généraux
render_to_response
sous la forme d'une fonction d'affichage.la source
Depuis les documents de Django :
direct_to_template
est quelque chose de différent. C'est une vue générique qui utilise un dictionnaire de données pour rendre le html sans avoir besoin de views.py, vous l'utilisez dans urls.py. Documents icila source
Juste une note que je n'ai pas pu trouver dans les réponses ci-dessus. Dans ce code:
Que
context_instance
fait réellement le troisième paramètre ? Étant RequestContext, il définit un contexte de base qui est ensuite ajouté àuser_context
. Le modèle obtient donc ce contexte étendu. Les variables ajoutées sont données parTEMPLATE_CONTEXT_PROCESSORS
dans settings.py. Par exemple, django.contrib.auth.context_processors.auth ajoute une variableuser
et une variableperm
qui sont ensuite accessibles dans le modèle.la source