Jaka jest różnica (w języku, w którym python / django noob może zrozumieć) w widoku pomiędzy render()
, render_to_response()
a direct_to_template()
?
np. z podstawowych przykładów aplikacji Nathana Borrora
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,
})
Ale też widziałem
return render_to_response(template_name, my_data_dictionary,
context_instance=RequestContext(request))
I
return direct_to_template(request, template_name, my_data_dictionary)
Jaka jest różnica, czego użyć w konkretnej sytuacji?
render()
jest dostępny od 1.3.Odświeżanie odpowiedzi Yuriego, Fábio i Frostsa dla Django noob (tj. Mnie) - prawie na pewno uproszczenie, ale dobry punkt wyjścia?
render_to_response()
jest „oryginalny”, ale wymaga przezcontext_instance=RequestContext(request)
cały czas posiadania PITA.direct_to_template()
jest przeznaczony do użycia tylko w urls.py bez widoku zdefiniowanego w views.py, ale można go używać w views.py, aby uniknąć konieczności wpisywania RequestContextrender()
jest skrótem dorender_to_response()
tego, który automatycznie dostarczacontext_instance=Request
... Jest dostępny w wersji rozwojowej django (1.2.1), ale wielu stworzyło własne skróty, takie jak ten , ten lub ten, który początkowo rzucił mi Nathans basic.tools. shortcuts.pyźródło
Renderowanie jest
Tak więc naprawdę nie ma różnicy,
render_to_response
z wyjątkiem tego, że otacza kontekst, dzięki czemu preprocesory szablonu działają.Bezpośrednio do szablonu jest ogólny widok .
Naprawdę nie ma sensu używać go tutaj, ponieważ narzuca się narzut
render_to_response
w postaci funkcji widoku.źródło
Z dokumentów django :
direct_to_template
to coś innego. To ogólny widok, który używa słownika danych do renderowania html bez potrzeby views.py, używasz go w urls.py. Dokumenty tutajźródło
Tylko jedną notatkę nie znalazłem w powyższych odpowiedziach. W tym kodzie:
Co
context_instance
faktycznie robi trzeci parametr ? Będąc RequestContext ustawia podstawowy kontekst, który jest następnie dodawanyuser_context
. Szablon otrzymuje więc ten rozszerzony kontekst. Jakie zmienne są dodawane sąTEMPLATE_CONTEXT_PROCESSORS
w pliku settings.py. Na przykład django.contrib.auth.context_processors.auth dodaje zmiennąuser
i zmienne,perm
które są następnie dostępne w szablonie.źródło