Alter Django admin изменить текст заголовка списка - PullRequest
8 голосов
/ 21 августа 2009

Я создаю несколько пользовательских представлений для интерфейса администратора Django, которые используют стандартный список изменений в качестве промежуточного этапа. Это прекрасно работает, за исключением того, что страница списка изменений H1 - «Выбрать объект для изменения». «Изменить» не является правильным глаголом для действия, которое будет предпринимать пользователь в моих пользовательских представлениях.

Я нашел шаблоны django.contrib.admin, которые управляют макетом страниц списка изменений (change_list.html и change_list_results.html), но я не могу найти источник заголовка. Я предполагаю, что это переменная, переданная представлением где-то?

Как мне переопределить этот текст чем-то менее вводящим в заблуждение, например, «Выбрать объект» вместо «Выбрать объект для изменения»? Я согласен с изменением всех представлений списка изменений, а не только тех, которые я пытаюсь настроить; но я бы предпочел решение, которое является переопределением, а не модификацией кода django.contrib.admin, если это возможно.

Обновление: я нашел представление, ответственное за список изменений, оно main.py в django\contrib\admin\views. Переменная self.title в строке 69 (Django 1.0). Я получил желаемый результат, отредактировав эту строку

self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s to change') % force_unicode(self.opts.verbose_name))

читать

self.title = (self.is_popup and ugettext('Select %s') % force_unicode(self.opts.verbose_name) or ugettext('Select %s') % force_unicode(self.opts.verbose_name))

Мне по-прежнему было бы интересно услышать лучший способ достижения того же результата, который не предполагает взлома кода django.contrib.admin - похоже, что уже есть возможность получить заголовок так, как я мне это нравится, но я не уверен, как это вызвать?

Ответы [ 4 ]

15 голосов
/ 29 сентября 2015

Не уверен, что все еще актуально, но другой способ сделать это - передать extra_content для метода changelist_view. Например:

from django.contrib import admin

class MyCustomAdmin(admin.ModelAdmin):

    def changelist_view(self, request, extra_context=None):
        extra_context = {'title': 'Change this for a custom title.'}
        return super(MyCustomAdmin, self).changelist_view(request, extra_context=extra_context)
2 голосов
/ 14 июля 2015

Для текущих версий Django:

class CustomChangeList(django.contrib.admin.views.main.ChangeList):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.title = 'My Cool Title'

class MyAdmin(ModelAdmin):
    def get_changelist(self, request, **kwargs):
        return CustomChangeList
1 голос
/ 21 августа 2009

Уже есть билет для настройки ChangeList: http://code.djangoproject.com/ticket/9749. Это даст возможность изменить многие дополнительные аспекты приложения администратора.К сожалению, нет чистого способа достичь ваших целей.

0 голосов
/ 26 апреля 2018

Вы можете переопределить метод и передать ему заголовок в extra_content , см .:

def change_view(self, request, object_id, form_url='', extra_context=None):

        extra_context = {'title': 'Hello Title'}

        return super(BlogAdmin, self).change_view(request, object_id,
            form_url, extra_context=extra_context)
...