2009-08-21 12 views
6

Tworzę niestandardowe widoki interfejsu administratora Django, które używają standardowej listy zmian jako etapu przejściowego. Działa to dobrze, poza tym, że strona listy zmian H1 to "Wybierz obiekt do zmiany". "Zmiana" nie jest właściwym czasownikiem dla akcji, którą użytkownik podejmie w moich widokach niestandardowych.Alter Django - zmiana nazwy tytułu listy administracyjnej

Znalazłem szablony django.contrib.admin, które kontrolują układ stron listy zmian (change_list.html i change_list_results.html), ale nie mogę znaleźć miejsca, z którego pochodzi tytuł. Zgaduję, że jest to zmienna przekazywana przez jakiś widok?

Jak mogę zmienić ten tekst za pomocą czegoś mniej mylącego np. "Wybierz obiekt" zamiast "Wybierz obiekt do zmiany"? Jestem w porządku, zmieniając go we wszystkich widokach listy zmian, a nie tylko tych, które próbuję dostosować; ale wolę rozwiązanie, które jest nadpisaniem, w przeciwieństwie do modyfikacji kodu django.contrib.admin, jeśli to możliwe.

Aktualizacja: Znalazłem widok odpowiedzialny za listę zmian, to main.py w django\contrib\admin\views. Zmienna to self.title w linii 69 (Django 1.0). Mam acheived wynik szukam edytując tę ​​linię

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)) 

czytać

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)) 

bym nadal być naprawdę zainteresowany, aby usłyszeć lepszy sposób na osiągnięcie tego samego rezultatu, który nie wymagać hakowania kodu django.contrib.admin - wygląda na to, że istnieje już opcja, że ​​tytuł będzie taki, jakbym chciał, ale nie jestem pewien, jak to uruchomić?

Odpowiedz

2

Istnieje już bilet na dostosowanie ChangeList: http://code.djangoproject.com/ticket/9749. Umożliwi to zmianę wielu dodatkowych aspektów aplikacji administratora. Niestety nie ma czystej drogi do osiągnięcia swoich celów.

+0

Hmm, ta łatka wygląda obiecująco. Miejmy nadzieję, że to się uda. W tej chwili nie robi mi to wiele dobrego, ponieważ staram się trzymać kodu produkcyjnego, a nie używać SVN. Dziękuję za ważenie - wygląda na to, że będę musiał tylko użyć hackowania i zachować ostrożność, dokumentując moje zmiany na przyszłe ulepszenia. Nie jest to krytyczne, jeśli zostanie przywrócone do poprzedniego kodu przez uaktualnienie, jak przypuszczam. –

0

Dla obecnych wersji 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 
6

Nie wiem, czy nadal aktualna, ale inny sposób to zrobić byłoby przepuszczanie extra_content dla metody changelist_view. Na przykład:

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)