Qual é a diferença (na linguagem que um python / django noob pode entender) em uma visão entre render()
, render_to_response()
e direct_to_template()
?
por exemplo, dos exemplos de aplicativos básicos 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,
})
Mas eu também vi
return render_to_response(template_name, my_data_dictionary,
context_instance=RequestContext(request))
E
return direct_to_template(request, template_name, my_data_dictionary)
Qual é a diferença, o que usar em qualquer situação específica?
render()
está disponível na versão 1.3.Reformulando as respostas de Yuri, Fábio e Frosts para o Django noob (ou seja, eu) - quase certamente uma simplificação, mas um bom ponto de partida?
render_to_response()
é o "original", mas exige que você coloquecontext_instance=RequestContext(request)
quase o tempo todo, uma PITA.direct_to_template()
foi projetado para ser usado apenas em urls.py sem uma visualização definida em views.py, mas pode ser usado em views.py para evitar a necessidade de digitar RequestContextrender()
é um atalho pararender_to_response()
o fornecimento automáticocontext_instance=Request
... Está disponível na versão de desenvolvimento do django (1.2.1), mas muitos criaram seus próprios atalhos como este , este ou aquele que me lançou inicialmente, Nathans basic.tools. shortcuts.pyfonte
Render é
Portanto, não há realmente nenhuma diferença entre,
render_to_response
exceto que envolve o seu contexto, fazendo com que os pré-processadores de modelos funcionem.Direto para o modelo é uma exibição genérica .
Realmente não faz sentido usá-lo aqui, porque há sobrecarga
render_to_response
na forma de função de visualização.fonte
Dos documentos do django :
direct_to_template
é algo diferente. É uma visão genérica que usa um dicionário de dados para renderizar o html sem a necessidade do views.py, você o usa em urls.py. Documentos aquifonte
Apenas uma nota que não encontrei nas respostas acima. Neste código:
O que o terceiro parâmetro
context_instance
realmente faz? Sendo RequestContext, ele configura algum contexto básico ao qual é adicionadouser_context
. Portanto, o modelo obtém esse contexto estendido. Quais variáveis são adicionadas são fornecidasTEMPLATE_CONTEXT_PROCESSORS
em settings.py. Por exemplo, django.contrib.auth.context_processors.auth adiciona variáveisuser
e variáveisperm
que são acessíveis no modelo.fonte