Закрыть

Для эффективной работы на сайте используются cookie и обработка персональных данных. Пользуясь этим сайтом, вы соглашаетесь с правилами использования сайта. Подробнее

Цитата дня

Vivazzi.ru

Личный сайт Мальцева Артема

Если человек стремится к чему-то всем своим сердцем, он обязательно сумеет добиться того, чего хочет, даже если это кажется невозможным, даже если все окружающие открыто заявляют ему, что это невозможно.

Чак Норрис

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

14 октября 2014 г. 0: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.

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

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

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

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

Автор статьи

Права на использование данной статьи, расположенной на настоящей странице http://vivazzi.ru/it/reverse-url-admin-django/:

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

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

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

Вам нужно саморазвиваться или вы хотите зарабатывать деньги?

Или вы ищите хорошие IT сервисы или книги? Сохраните свое время и взгляните на мою подборку рекомендаций, которыми постоянно пользуюсь.
Посмотреть рекомендации

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

Вы можете оставить комментарий как незарегистрированный пользователь. Но, зарегистрировавшись, вы сможете получать оповещения об ответах, а также иметь доступ к своему личному аккаунту для просмотра своих комментариев.

Чтобы оставить комментарий от своего имени войдите или зарегистрируйтесь обычным способом или через социальные сети:

Отправить

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

Попробуйте