Avant Django 1.0, il y avait un moyen simple d'obtenir l'URL d'administration d'un objet, et j'avais écrit un petit filtre que j'utiliserais comme ceci: <a href="{{ object|admin_url }}" .... > ... </a>
Fondamentalement, j'utilisais la fonction d'inversion d'URL avec le nom de la vue 'django.contrib.admin.views.main.change_stage'
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
pour obtenir l'url.
Comme vous l'avez peut-être deviné, j'essaie de mettre à jour vers la dernière version de Django, et c'est l'un des obstacles que j'ai rencontrés, cette méthode pour obtenir l'URL d'administration ne fonctionne plus.
Comment puis-je faire cela dans django 1.0? (ou 1.1 d'ailleurs, car j'essaye de mettre à jour vers la dernière version du svn).
Vous pouvez utiliser le résolveur d'URL directement dans un modèle, il n'est pas nécessaire d'écrire votre propre filtre. Par exemple
{% url 'admin:index' %}
{% url 'admin:polls_choice_add' %}
{% url 'admin:polls_choice_change' choice.id %}
{% url 'admin:polls_choice_changelist' %}
Réf: Documentation
la source
Ceci est similaire à la solution de hansen_j sauf qu'elle utilise les espaces de noms d'url , admin: étant l'espace de noms d'application par défaut de l'administrateur.
la source
args=[object.pk]
au lieu deargs=[object.id]
. Il couvre le cas plus courant, lorsque le champ de clé primaire a un autre nom queid
.object._meta.app_label
laissez-moi finalement obtenir le nom de la propre application d'authentification de django. C'estauth
, par exemple,reverse(admin:auth_user_change, args=[object.id])
pour passer à la page de changement d'utilisateurIl existe un autre moyen pour les versions ultérieures, par exemple dans la 1.10 :
Où
opts
est quelque chose commemymodelinstance._meta
ouMyModelClass._meta
Un problème est que vous ne pouvez pas accéder aux attributs de soulignement directement dans les modèles Django (comme
{{ myinstance._meta }}
), vous devez donc passer l'opts
objet à partir de la vue en tant que contexte de modèle.la source
Essentiellement la même que la réponse de Mike Ramirez, mais plus simple et plus proche en stylistique de la
get_absolute_url
méthode standard de django :la source
Pour django pré 1.1, c'est simple (pour l'instance de site d'administration par défaut):
la source
Si vous utilisez 1.0, essayez de créer une étiquette de modèle personnalisée qui ressemble à ceci:
puis utilisez simplement {% adminpageurl my_object%} dans votre template (n'oubliez pas de charger d'abord le templatetag)
la source
J'ai résolu ce problème en changeant l'expression en:
Cela nécessite / suppose que la racine de l'url conf a un nom pour le gestionnaire d'url "admin", principalement ce nom est "django-admin",
c'est à dire dans la racine de l'url conf:
Il semble fonctionner, mais je ne suis pas sûr de sa propreté.
la source
Voici une autre option, en utilisant des modèles:
Créez un modèle de base (ou ajoutez simplement la méthode admin_link à un modèle particulier)
Hériter de ce modèle de base
Utilisez-le dans un modèle
Ou voir
la source