Jika saya menetapkan variabel sesi dalam Django, seperti:
request.session["name"] = "name"
Apakah ada cara saya dapat mengaksesnya dari dalam templat, atau apakah saya harus mengambilnya dari dalam tampilan, lalu meneruskannya ke templat?
Bertanya karena saya memiliki sekitar 10 variabel sesi kecil yang ingin saya akses di dalam templat, dan meneruskan semua 10 dari tampilan ke templat bisa menjadi sedikit berantakan.
(Saya harus menggunakan variabel sesi karena itu adalah HttpResponseRedirect, tetapi menyimpan variabel dalam database berlebihan untuk tujuan saya.)
Jadi - ada cara untuk mengambil variabel sesi langsung di dalam templat?
HttpResponse
kelas tidak berurusan dengan template sama sekali, jadi pertanyaannya tampaknya tidak relevan ...request.session
adalah kamus seperti kamus lainnya, jadi Anda cukup menggunakan mekanisme templat normal untuk atribut dan anggota:Jangan lupa untuk mengirimkan permintaan ke dalam konteks templat, atau bahkan lebih baik memastikan Anda menggunakan RequestContext dan mengaktifkan prosesor konteks permintaan. Lihat dokumentasi .
sumber
Saya menggunakan Django 1.9 (Maret 2016) dan untuk mulai
{{ request.session.name}}
bekerja, pengaturan saya punya ini ::Perbedaan dari jawaban sebelumnya adalah:
'django.core.context_processors.request'
menjadi'django.template.context_processors.request'
sumber
django.template.context_processors.request
sudah ada dalam file pengaturan: DAnda bisa mengirimkan
request
variabel ke templat dan menggunakan:sumber
Cetak
request.session.keys()
duluAnda akan mendapatkan dua variabel sesi ini.
sumber
implementasi paling sederhana adalah menggunakan if loop:
sumber
Di settins.py Anda
Pandangan Anda, mungkin terlihat seperti ini.
sumber
Melanjutkan jawaban Trammer @Ludwik, Bagaimana cara menambahkan TEMPLATE_CONTEXT_PROCESSORS
Untuk django 1.6, di settings.py tambahkan TEMPLATE_CONTEXT_PROCESSORS merujuk kode di bawah ini dan kemudian gunakan
{{ request.session.name }}
dalam file template.Referensi https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS
Harap perhatikan bahwa, Anda harus menggunakan kode lengkap itu dalam pengaturan. Menggunakannya
"django.core.context_processors.request"
sendiri akan menghasilkan mengesampingkan pengaturan default.sumber
Mungkin agak terlambat sekarang. Jika Anda langsung
TEMPLATE_CONTEXT_PROCESSORS
masuksettings.py
, Anda akan kehilangan semuaTEMPLATE_CONTEXT_PROCESSORS
nilai default . Inilah yang saya lakukan disettings.py
:sumber