Misalnya saya dapat menunjukkan url '^/accounts/password/reset/$'
ke django.contrib.auth.views.password_reset
dengan nama file template saya dalam konteks tetapi saya pikir perlu mengirim lebih banyak detail konteks.
Saya perlu tahu persis konteks apa yang harus ditambahkan untuk setiap pengaturan ulang kata sandi dan mengubah tampilan.
context
hal yang benar yang Anda cari!Jawaban:
Jika Anda melihat sumber untuk django.contrib.auth.views.password_reset Anda akan melihat bahwa itu digunakan
RequestContext
. Hasilnya adalah, Anda dapat menggunakan Prosesor Konteks untuk mengubah konteks yang memungkinkan Anda memasukkan informasi yang Anda butuhkan.B-list memiliki pengantar yang baik untuk pengolah konteks .
Sunting (Saya sepertinya bingung tentang apa pertanyaan sebenarnya):
Anda akan melihat bahwa
password_reset
mengambil parameter bernama yang disebuttemplate_name
:Periksa password_reset untuk informasi lebih lanjut.
... jadi, dengan urls.py seperti:
django.contrib.auth.views.password_reset
akan dipanggil untuk URL yang cocok'/accounts/password/reset'
dengan argumen kata kuncitemplate_name = 'my_templates/password_reset.html'
.Jika tidak, Anda tidak perlu memberikan konteks apa pun karena
password_reset
tampilan tersebut berjalan dengan sendirinya. Jika Anda ingin melihat konteks apa yang Anda miliki, Anda dapat memicuTemplateSyntax
kesalahan dan melihat jejak tumpukan menemukan bingkai dengan variabel lokal bernamacontext
. Jika Anda ingin mengubah konteks, apa yang saya katakan di atas tentang prosesor konteks mungkin adalah cara yang tepat.Singkatnya: apa yang perlu Anda lakukan untuk menggunakan template Anda sendiri? Berikan
template_name
argumen kata kunci ke tampilan saat dipanggil. Anda dapat memberikan argumen kata kunci ke tampilan dengan memasukkan kamus sebagai anggota ketiga tupel pola URL.sumber
registration/password_reset_email.html
benar-benar mengandung unsur html seperti:<div>
,<a>
karena ini mengirimkan teks sajaSangat merekomendasikan artikel ini.
Saya baru saja mencolokkannya dan berhasil
http://garmoncheg.blogspot.com.au/2012/07/django-resetting-passwords-with.html
sumber
Anda hanya perlu membungkus fungsi yang ada dan meneruskan template yang Anda inginkan. Sebagai contoh:
Untuk melihat ini, lihat saja deklarasi fungsi dari tampilan bawaan:
http://code.djangoproject.com/browser/django/trunk/django/contrib/auth/views.py#L74
sumber
Anda dapat melakukan hal berikut:
Penjelasan:
Ketika templat dimuat, mereka dicari di variabel INSTALLED_APPS Anda di settings.py. Urutan ditentukan oleh peringkat definisi di INSTALLED_APPS, jadi karena aplikasi Anda datang sebelum 'django.contrib.auth', template Anda dimuat (referensi: https://docs.djangoproject.com/en/dev/ref/templates/api /#django.template.loaders.app_directories.Loader ).
Motivasi pendekatan:
sumber
Solusi lain, mungkin lebih sederhana, adalah menambahkan direktori template override Anda ke entri DIRS dari pengaturan TEMPLATES di settings.py. (Saya pikir pengaturan ini baru di Django 1.8. Ini mungkin telah disebut TEMPLATE_DIRS di versi Django sebelumnya.)
Seperti:
Kemudian taruh file template pengganti Anda di bawah
my_app/templates
. Jadi, template penyetelan ulang sandi yang akan diganti adalahmy_app/templates/registration/password_reset_form.html
sumber
The dokumentasi mengatakan bahwa ada hanya satu variabel konteks,
form
.Jika Anda mengalami masalah dengan login (yang umum), dokumentasinya mengatakan ada tiga variabel konteks:
form
: Objek Formulir yang mewakili formulir login. Lihat dokumentasi formulir untuk mengetahui selengkapnya tentang objek Formulir.next
: URL tujuan pengalihan setelah berhasil masuk. Ini mungkin berisi string kueri juga.site_name
: Nama Situs saat ini, menurut setelan SITE_ID.sumber
password_reset
pandangan tersebut.Saya menggunakan dua baris ini di url dan template dari admin apa yang saya ubah sesuai kebutuhan saya
sumber