reverse url admin django. Получить путь объекта в представлениях и шаблонах для изменения в админке

14 октября 2014 г. 4:23

Получить путь (url) объекта в представлениях и шаблонах для изменения в админке не сложно. Достаточно знать синтаксис первого аргумента метода reverse. Для того, чтобы что-то сделать с объектом из админки нужно сначала написать "admin:app_model_", где app - приложение, где находится необходимая модель, model - сама модель. И выбрать необходимое действие:

  • add - добавить новый объект.
  • change - изменить объект.
  • changelist - открыть список объектов.
  • history - открыть историю изменения объекта.
  • delete - удалить объект.

Ниже я привёл примеры, которые наглядно это дело отображают (обратите внимание, что некоторые урлы требуют id объекта).

В представлениях (во вьюхах)

instance = Model.objects.get(id=1)  # Найдём объект по id=1  к примеру

reverse('admin:app_model_add')
reverse('admin:app_model_change', args=(instance.id,))
reverse('admin:app_model_changelist')
reverse('admin:app_model_history', args=(instance.id,))
reverse('admin:app_model_delete', args=(instance.id,))

В шаблонах

В шаблоне можно получить необходимый url по следующим примерам:

{% url 'admin:app_model_add' %}
{% url 'admin:app_model_change' instance.id %}
{% url 'admin:app_model_changelist' %}
{% url 'admin:app_model_history' instance.id %}
{% url 'admin:app_model_delete' instance.id %}

Другие реверсы

Другие реверсы, которые могут быть полезны:

# Во вьюхе:
reverse('admin:index')  # начальная страница админки
reverse('admin:logout')  # урл выхода с сайта
reverse('admin:password_change')  # смена пароля
reverse('admin:password_change_done')  # страница успешного изменения пароля
reverse('admin:jsi18n')  # i18n JavaScript
reverse('admin:app_list', args=(app_label ,))  # начальная страница приложения
reverse('admin:view_on_site', args=(content_type_id, instance.id,))  # редирект на страницу объекта. Объект должен при этом иметь get_absolute_url().

# В шаблонах:
{% url 'admin:index' %}
{% url 'admin:logout' %}
{% url 'admin:password_change' %}
{% url 'admin:password_change_done' %}
{% url 'admin:jsi18n' %}
{% url 'admin:app_list' app_label %}
{% url 'admin:view_on_site' content_type_id, instance.id %}

Ещё есть интересный момент - можно получить url для изменения объекта через get_urls() экземпляра вашего класса admin. Например:

@admin.register(Category)
class ExtendedCategoryAdmin(models.Admin):
    list_display = ('name', 'full_path')

    def full_path(self, obj):
        result = []
        items = obj.get_path()
        for item in items:
            url = reverse(u'admin:{}'.format(self.get_urls()[4].name), args=(item.id,))           
            result.append(u'<a href="{0}">{1}</a>'.format(url, item))
        return ' > '.join(result)
    full_path.short_description = u'Полный путь категории'
    full_path.allow_tags = True

Данный код будет формировать строку из ссылок на изменение объектов в админке. self.get_urls()[4].name будет возвращать my_app_category_change.

Список стандартных урлов для манипулирования объектом admin:

self.get_urls()[0].name - changelist
self.get_urls()[1].name - add
self.get_urls()[2].name - history
self.get_urls()[3].name - delete
self.get_urls()[4].name - change

Также с помощью переопределения метода self.get_urls() можно добавлять свои url-ы, но это уже другая тема.

Ссылка на официальную документацию: reversing-admin-urls.

Оцените статью

5 из 5 (всего 3 оценки)

captcha
Отмеченные звёздочкой поля ( * ) являются обязательными для заполнения.

Спасибо за ваш отзыв!

После нажатия кнопки "Отправить" ваше сообщение будет доставлено мне на почту.

Автор статьи

Артём Мальцев

Веб-разработчик, владеющий знаниями языка программирования Python, фреймворка Django, системы управления содержимым сайта Django CMS, платформы для создания интернет-магазина Django Shop и многих различных приложений, использующих эти технологии.

Права на использование материала, расположенного на этой странице https://vivazzi.pro/ru/it/reverse-url-admin-django/:

Разрешается копировать материал с указанием её автора и ссылки на оригинал без использования параметра rel="nofollow" в теге <a>. Использование:

Автор статьи: Артём Мальцев
Ссылка на статью: <a href="https://vivazzi.pro/ru/it/reverse-url-admin-django/">https://vivazzi.pro/ru/it/reverse-url-admin-django/</a>

Больше: Правила использования сайта

Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.

Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.

Комментарии: 0

Вы можете оставить комментарий как незарегистрированный пользователь.

Но зарегистрировавшись, вы сможете:

  • получать оповещения об ответах
  • просматривать свои комментарии
  • иметь возможность использовать все функции разработанных сервисов

Для комментирования от своего имени войдите или зарегистрируйтесь на сайте Vuspace

Отправить

На данный момент нет специального поиска, поэтому я предлагаю воспользоваться обычной поисковой системой, например, Google, добавив "vivazzi" после своего запроса.

Попробуйте

Выберите валюту для отображения денежных единиц