До Django 1.0 был простой способ получить административный URL-адрес объекта, и я написал небольшой фильтр, который я использовал бы так: <a href="{{ object|admin_url }}" .... > ... </a>
В основном я использовал функцию обратного URL с именем вида 'django.contrib.admin.views.main.change_stage'
reverse( 'django.contrib.admin.views.main.change_stage', args=[app_label, model_name, object_id] )
чтобы получить URL.
Как вы, наверное, догадались, я пытаюсь обновиться до последней версии Django, и это одно из препятствий, с которыми я столкнулся, этот метод получения URL-адреса администратора больше не работает.
Как я могу сделать это в Django 1.0? (или 1.1 в этом отношении, поскольку я пытаюсь обновить до последней версии в SVN).
Вы можете использовать преобразователь URL-адресов непосредственно в шаблоне, нет необходимости писать собственный фильтр. Например
{% url 'admin:index' %}
{% url 'admin:polls_choice_add' %}
{% url 'admin:polls_choice_change' choice.id %}
{% url 'admin:polls_choice_changelist' %}
Ссылка: Документация
источник
Это похоже на решение hansen_j за исключением того, что оно использует пространства имен url , admin: это пространство имен приложения администратора по умолчанию.
источник
args=[object.pk]
вместоargs=[object.id]
. Он охватывает более распространенный случай, когда поле первичного ключа имеет другое имя, чемid
.object._meta.app_label
позвольте мне в конечном итоге получить имя для собственного приложения аутентификации Django. Этоauth
, например ,reverse(admin:auth_user_change, args=[object.id])
чтобы перейти на страницу пользователя измененияДля более поздних версий есть другой способ, например, в 1.10 :
Где
opts
что-то вродеmymodelinstance._meta
илиMyModelClass._meta
Одна проблема в том, что вы не можете получить доступ к атрибутам подчеркивания непосредственно в шаблонах Django (например
{{ myinstance._meta }}
), поэтому вам нужно передатьopts
объект из представления как контекст шаблона.источник
По сути то же самое, что и ответ Майка Рамиреса, но проще и ближе по стилистике к стандартному
get_absolute_url
методу django :источник
Для pre 1.1 django это просто (для экземпляра сайта администратора по умолчанию):
источник
Если вы используете 1.0, попробуйте создать собственный тег шаблона, который будет выглядеть следующим образом:
затем просто используйте {% adminpageurl my_object%} в своем шаблоне (не забудьте сначала загрузить тег шаблона)
источник
Я решил это, изменив выражение на:
Это требует / предполагает, что у корневого URL-адреса есть имя для обработчика URL-адреса «admin», в основном это имя «django-admin»,
т.е. в корне url conf:
Вроде бы работает, но я не уверен в его чистоте.
источник
Вот еще один вариант, используя модели:
Создайте базовую модель (или просто добавьте метод admin_link к конкретной модели)
Унаследовать от этой базовой модели
Используйте это в шаблоне
Или посмотреть
источник