Apa perbedaannya (dalam bahasa yang bisa dipahami oleh python / django noob) di antara render()
, render_to_response()
dan direct_to_template()
?
misalnya dari contoh aplikasi dasar 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,
})
Tapi saya juga sudah melihatnya
return render_to_response(template_name, my_data_dictionary,
context_instance=RequestContext(request))
Dan
return direct_to_template(request, template_name, my_data_dictionary)
Apa bedanya, apa yang harus digunakan dalam situasi tertentu?
render()
tersedia dari 1.3.Mengulangi jawaban Yuri, Fábio, dan Frosts untuk Django noob (yaitu saya) - hampir pasti merupakan penyederhanaan, tetapi merupakan titik awal yang baik?
render_to_response()
adalah "asli", tetapi mengharuskan Anda memasukkancontext_instance=RequestContext(request)
hampir setiap waktu, sebuah PITA.direct_to_template()
dirancang untuk digunakan hanya di urls.py tanpa tampilan yang ditentukan di views.py tetapi dapat digunakan di views.py untuk menghindari keharusan mengetikkan RequestContextrender()
adalah jalan pintas untukrender_to_response()
yang secara otomatis memasokcontext_instance=Request
.... Ini tersedia dalam versi pengembangan Django (1.2.1) tetapi banyak yang telah membuat jalan pintas mereka sendiri seperti ini , yang ini atau yang melempar saya awalnya, Nathans basic.tools. shortcuts.pysumber
Render adalah
Jadi sebenarnya tidak ada perbedaan antara
render_to_response
kecuali itu membungkus konteks Anda membuat template pra-prosesor bekerja.Langsung ke templat adalah tampilan umum .
Sebenarnya tidak ada gunanya menggunakannya di sini karena ada overhead
render_to_response
di atas dalam bentuk fungsi tampilan.sumber
Dari django docs :
direct_to_template
adalah sesuatu yang berbeda. Ini adalah tampilan umum yang menggunakan kamus data untuk merender html tanpa memerlukan views.py, Anda menggunakannya di urls.py. Dokumen di sinisumber
Hanya satu catatan yang tidak dapat saya temukan dalam jawaban di atas. Dalam kode ini:
Apa
context_instance
sebenarnya parameter ketiga ? Menjadi RequestContext itu mengatur beberapa konteks dasar yang kemudian ditambahkanuser_context
. Jadi templat mendapatkan konteks yang diperluas ini. Variabel apa yang ditambahkan diberikan olehTEMPLATE_CONTEXT_PROCESSORS
di settings.py. Misalnya django.contrib.auth.context_processors.auth menambahkan variabeluser
dan variabelperm
yang kemudian dapat diakses dalam templat.sumber