Vor Django 1.0 gab es eine einfache Möglichkeit, die Administrator-URL eines Objekts abzurufen, und ich hatte einen kleinen Filter geschrieben, den ich folgendermaßen verwenden würde: <a href="{{ object|admin_url }}" .... > ... </a>
Grundsätzlich habe ich die URL-Umkehrfunktion mit dem Namen der Ansicht verwendet 'django.contrib.admin.views.main.change_stage'
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
um die URL zu bekommen.
Wie Sie vielleicht erraten haben, versuche ich, auf die neueste Version von Django zu aktualisieren, und dies ist eines der Hindernisse, auf die ich gestoßen bin. Diese Methode zum Abrufen der Administrator-URL funktioniert nicht mehr.
Wie kann ich das in Django 1.0 machen? (oder 1.1 für diese Angelegenheit, da ich versuche, auf die neueste Version im SVN zu aktualisieren).
quelle
Sie können den URL-Resolver direkt in einer Vorlage verwenden. Sie müssen keinen eigenen Filter schreiben. Z.B
{% url 'admin:index' %}
{% url 'admin:polls_choice_add' %}
{% url 'admin:polls_choice_change' choice.id %}
{% url 'admin:polls_choice_changelist' %}
Ref: Dokumentation
quelle
Dies ähnelt der Lösung von hansen_j, verwendet jedoch URL-Namespaces , wobei admin: der Standard-Anwendungsnamespace des Administrators ist.
quelle
args=[object.pk]
stattargs=[object.id]
. Es wird häufiger behandelt, wenn das Primärschlüsselfeld einen anderen Namen als hatid
.object._meta.app_label
Lassen Sie mich letztendlich den Namen für Djangos eigene Authentifizierungs-App erhalten. Es istauth
zum Beispielreverse(admin:auth_user_change, args=[object.id])
, um zur Benutzerseite zu wechselnEs gibt einen anderen Weg für die späteren Versionen, zum Beispiel in 1.10 :
Wo
opts
ist so etwas wiemymodelinstance._meta
oderMyModelClass._meta
Ein Problem ist, dass Sie nicht direkt in Django-Vorlagen (wie
{{ myinstance._meta }}
) auf Unterstrichattribute zugreifen können, sodass Sie dasopts
Objekt aus der Ansicht als Vorlagenkontext übergeben müssen.quelle
Im Wesentlichen das Gleiche wie die Antwort von Mike Ramirez, jedoch einfacher und stilistisch näher an der Django-Standardmethode
get_absolute_url
:quelle
Für Django vor 1.1 ist es einfach (für die Standardinstanz der Admin-Site):
quelle
Wenn Sie 1.0 verwenden, erstellen Sie ein benutzerdefiniertes Templatetag, das folgendermaßen aussieht:
Verwenden Sie dann einfach {% adminpageurl my_object%} in Ihrer Vorlage (vergessen Sie nicht, zuerst das Templatetag zu laden).
quelle
Ich habe dies gelöst, indem ich den Ausdruck geändert habe in:
Dies erfordert / setzt voraus, dass die Root-URL conf einen Namen für den URL-Handler "admin" hat, hauptsächlich "django-admin".
dh in der root url conf:
Es scheint zu funktionieren, aber ich bin mir nicht sicher, ob es sauber ist.
quelle
Hier ist eine weitere Option unter Verwendung von Modellen:
Erstellen Sie ein Basismodell (oder fügen Sie einfach die admin_link-Methode zu einem bestimmten Modell hinzu)
Von diesem Basismodell erben
Verwenden Sie es in einer Vorlage
Oder ansehen
quelle