Закрыть

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

Цитата дня

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" после своего запроса.

Попробуйте