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.
Похожие статьи:
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0