Sebelum Django 1.0 ada cara mudah untuk mendapatkan url admin suatu objek, dan saya telah menulis filter kecil yang saya gunakan seperti ini: <a href="{{ object|admin_url }}" .... > ... </a>
Pada dasarnya saya menggunakan fungsi url reverse dengan nama tampilan sedang 'django.contrib.admin.views.main.change_stage'
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
untuk mendapatkan url.
Seperti yang mungkin sudah Anda duga, saya mencoba memperbarui ke versi terbaru Django, dan ini adalah salah satu kendala yang saya temui, metode untuk mendapatkan url admin tidak berfungsi lagi.
Bagaimana saya bisa melakukan ini di Django 1.0? (atau 1.1 dalam hal ini, karena saya mencoba memperbarui ke versi terbaru di svn).
sumber
Anda dapat menggunakan penyelesai URL secara langsung dalam templat, tidak perlu menulis filter Anda sendiri. Misalnya
{% url 'admin:index' %}
{% url 'admin:polls_choice_add' %}
{% url 'admin:polls_choice_change' choice.id %}
{% url 'admin:polls_choice_changelist' %}
Ref: Dokumentasi
sumber
Ini mirip dengan solusi hansen_j kecuali bahwa ia menggunakan ruang nama url , admin: menjadi namespace aplikasi default admin.
sumber
args=[object.pk]
sebagai gantiargs=[object.id]
. Ini mencakup kasus yang lebih umum, ketika bidang kunci utama memiliki nama lain dariid
.object._meta.app_label
biarkan saya akhirnya mendapatkan nama untuk aplikasi otentikasi django sendiri. Iniauth
, misalnyareverse(admin:auth_user_change, args=[object.id])
untuk melompat ke halaman perubahan penggunaAda cara lain untuk versi yang lebih baru, misalnya di 1.10 :
Di mana
opts
sesuatu sepertimymodelinstance._meta
atauMyModelClass._meta
Salah satu Gotcha adalah Anda tidak dapat mengakses atribut garis bawah langsung di templat Django (seperti
{{ myinstance._meta }}
) sehingga Anda harus meneruskanopts
objek dari tampilan sebagai konteks templat.sumber
Pada dasarnya sama dengan jawaban Mike Ramirez, tetapi lebih sederhana dan lebih dekat dalam gaya bahasa untuk
get_absolute_url
metode standar Django :sumber
Untuk pre 1.1 django itu sederhana (untuk instance situs admin default):
sumber
Jika Anda menggunakan 1.0, cobalah membuat templatetag khusus yang terlihat seperti ini:
maka cukup gunakan {% adminpageurl my_object%} di templat Anda (jangan lupa memuat templatetag terlebih dahulu)
sumber
Saya memecahkan masalah ini dengan mengubah ekspresi menjadi:
Ini mensyaratkan / mengasumsikan bahwa root url conf memiliki nama untuk url handler "admin", terutama nama itu adalah "django-admin",
yaitu di root url conf:
Tampaknya berfungsi, tapi saya tidak yakin dengan kebersihannya.
sumber
Berikut opsi lain, menggunakan model:
Buat model dasar (atau cukup tambahkan metode admin_link ke model tertentu)
Mewarisi dari model dasar itu
Gunakan itu dalam templat
Atau lihat
sumber