Saya bertanya-tanya bagaimana cara mendapatkan URL saat ini dalam sebuah template.
Katakan URL saya saat ini adalah:
.../user/profile/
Bagaimana cara mengembalikan ini ke templat?
django
django-templates
Dotty
sumber
sumber
request
dalam template. Di Django 1.10 saya hanya mengakses{{request.path}}
di template dan itu berfungsi. Secara defaultdjango.core.context_processors.request
sudah dikonfigurasi di settings.py jika Anda menggunakanstartproject
Jawaban:
Django 1.9 dan lebih tinggi:
Tua:
sumber
render_to_response
, dan tidakrender_to_request
. Dan Anda tidak dapat mendefinisikanTEMPLATE_CONTEXT_PROCESSORS
seperti yang Anda lakukan di settings.py, tanpa menyebutkan prosesor default lain yang mungkin digunakan dalam templat!request.path
tidak termasuk parameter kueri suka?foo=bar
. Gunakanrequest.get_full_path
sebagai gantinya.Anda dapat mengambil URL di templat Anda seperti ini:
atau oleh
{{ request.path }}
jika Anda tidak memerlukan parameter tambahan.Beberapa persiapan dan koreksi harus dibawa ke jawaban hypete dan Igancio , saya hanya akan meringkas seluruh ide di sini, untuk referensi di masa mendatang.
Jika Anda memerlukan
request
variabel dalam templat, Anda harus menambahkan 'django.core.context_processors.request' keTEMPLATE_CONTEXT_PROCESSORS
pengaturan, itu tidak secara default (Django 1.4).Anda juga harus tidak melupakan prosesor konteks lain yang digunakan oleh aplikasi Anda. Jadi, untuk menambahkan permintaan ke prosesor default lain, Anda bisa menambahkan ini di pengaturan Anda, untuk menghindari pengodean daftar prosesor default (yang mungkin berubah di versi yang lebih baru):
Kemudian, asalkan Anda mengirim
request
konten dalam respons Anda , misalnya seperti ini:sumber
request
konteks.Note that a settings file should not import from global_settings, because that’s redundant
return render(request, 'user/profile.html', {'title': 'User profile'})
lebih pendek{{request.get_full_path|urlenode}}
jika Anda mengarahkan ulangKode di bawah ini membantu saya:
sumber
Dalam template Django
Cukup dapatkan url saat ini dari
{{request.path}}
Untuk mendapatkan url penuh dengan parameter
{{request.get_full_path}}
Catatan : Anda harus menambahkan
request
djangoTEMPLATE_CONTEXT_PROCESSORS
sumber
Saya kira kirim ke templat permintaan penuh sedikit berlebihan. Saya melakukannya dengan cara ini
sumber
Jawaban lainnya salah, setidaknya dalam kasus saya.
request.path
tidak menyediakan url lengkap, hanya url relatif, mis/paper/53
. Saya tidak menemukan solusi yang tepat, jadi saya akhirnya meng-hardcoding bagian konstan url di View sebelum menyatukannyarequest.path
.sumber
Keduanya
{{ request.path }} and {{ request.get_full_path }}
mengembalikan URL saat ini tetapi bukan URL absolut, misalnya:Jadi, Anda harus melakukan sesuatu seperti
Namun, Anda bisa mendapatkan URL absolut menggunakan (berkat jawaban di atas)
CATATAN: Anda tidak perlu menyertakan
request
dalamsettings.py
, itu sudah ada.sumber
Ini adalah pertanyaan lama tetapi dapat disimpulkan semudah ini jika Anda menggunakan registrasi Django.
Di tautan Masuk dan Keluar (katakanlah di tajuk laman), tambahkan parameter berikutnya ke tautan yang akan masuk atau keluar. Tautan Anda akan terlihat seperti ini.
Hanya itu, tidak ada lagi yang perlu dilakukan, setelah logout mereka akan segera diarahkan ke halaman mereka, untuk login, mereka akan mengisi formulir dan kemudian akan mengarahkan ulang ke halaman tempat mereka berada. Bahkan jika mereka salah mencoba login masih berfungsi.
sumber
{{ request.path|urlencode }}
Jawaban di atas adalah benar dan mereka memberikan jawaban yang bagus dan singkat.
Saya juga mencari mendapatkan url halaman saat ini dalam template Django sebagai niat saya adalah untuk mengaktifkan
HOME page
,MEMBERS page
,CONTACT page
,ALL POSTS page
ketika mereka diminta.Saya menempelkan bagian dari potongan kode HTML yang dapat Anda lihat di bawah untuk memahami penggunaan
request.path
. Anda dapat melihatnyalive website
di http://pmtboyshostelraipur.pythonanywhere.com/sumber
active
kelas ke setiapli
elemen, mengapa tidak hanya melakukan inline dalam satuli
elemen:<li class="{% if "/contact/" == request.path %}active {% endif %}text-center">....</li>
alih-alih raksasa jika / yang lain memblokir keseluruhanli
? Itu akan menghemat sejumlah kode redundan :)Di Django 3, Anda ingin menggunakan tag template url :
Sebagai contoh, lihat dokumentasi
sumber