Przed Django 1.0 istniał łatwy sposób na uzyskanie adresu administratora obiektu, a ja napisałem mały filtr, którego użyłem w ten sposób: <a href="{{ object|admin_url }}" .... > ... </a>
Zasadniczo używałem funkcji odwracania adresu URL z nazwą widoku 'django.contrib.admin.views.main.change_stage'
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
aby uzyskać adres URL.
Jak można się domyślić, próbuję zaktualizować Django do najnowszej wersji i jest to jedna z przeszkód, na które się natknąłem, ta metoda uzyskiwania adresu administratora już nie działa.
Jak mogę to zrobić w django 1.0? (lub 1.1 w tej sprawie, ponieważ próbuję zaktualizować do najnowszej wersji w svn).
źródło
Możesz użyć narzędzia do rozpoznawania adresów URL bezpośrednio w szablonie, nie ma potrzeby pisania własnego filtra. Na przykład
{% url 'admin:index' %}
{% url 'admin:polls_choice_add' %}
{% url 'admin:polls_choice_change' choice.id %}
{% url 'admin:polls_choice_changelist' %}
Ref: Dokumentacja
źródło
Jest to podobne do rozwiązania hansen_j, z tym wyjątkiem, że używa przestrzeni nazw url , gdzie admin: jest domyślną przestrzenią nazw aplikacji administratora.
źródło
args=[object.pk]
zamiastargs=[object.id]
. Obejmuje bardziej powszechny przypadek, gdy pole klucza podstawowego ma inną nazwę niżid
.object._meta.app_label
Pozwól mi ostatecznie uzyskać nazwę własnej aplikacji uwierzytelniającej django. Chodziauth
na przykładreverse(admin:auth_user_change, args=[object.id])
o przeskok do strony zmiany użytkownikaJest inny sposób na późniejsze wersje, na przykład w 1.10 :
Gdzie
opts
jest coś takiegomymodelinstance._meta
lubMyModelClass._meta
Jednym z problemów jest to, że nie możesz uzyskać dostępu do atrybutów podkreślenia bezpośrednio w szablonach Django (takich jak
{{ myinstance._meta }}
), więc musisz przekazaćopts
obiekt z widoku jako kontekst szablonu.źródło
Zasadniczo to samo, co odpowiedź Mike'a Ramireza, ale prostsze i bliższe stylistyce do standardowej
get_absolute_url
metody django :źródło
Dla django w wersji starszej niż 1.1 jest to proste (dla domyślnej instancji witryny administracyjnej):
źródło
Jeśli używasz wersji 1.0, spróbuj utworzyć niestandardowy szablon szablonu, który wygląda następująco:
następnie po prostu użyj {% adminpageurl my_object%} w swoim szablonie (nie zapomnij najpierw załadować tagu szablonu)
źródło
Rozwiązałem to, zmieniając wyrażenie na:
To wymaga / zakłada, że główny adres url conf ma nazwę dla programu obsługi url "admin", głównie ta nazwa to "django-admin",
tj. w głównym adresie URL conf:
Wygląda na to, że działa, ale nie jestem pewien jego czystości.
źródło
Oto inna opcja, używając modeli:
Utwórz model podstawowy (lub po prostu dodaj metodę admin_link do konkretnego modelu)
Dziedzicz z tego modelu podstawowego
Użyj go w szablonie
Lub zobacz
źródło