Administrator Django - zmień tekst nagłówka „Administracja Django”


Odpowiedzi:


139

Aktualizacja : Jeśli używasz Django 1.7+, zobacz odpowiedź poniżej .


Oryginalna odpowiedź z 2011 r. Aby to zrobić, musisz utworzyć własny base_site.htmlszablon administratora . Najłatwiejszym sposobem jest utworzenie pliku:

/<projectdir>/templates/admin/base_site.html

Powinna to być kopia oryginałubase_site.html , z wyjątkiem podania własnego tytułu:

{% block branding %}
<h1 id="site-name">{% trans 'my cool admin console' %}</h1>
{% endblock %}

Aby to zadziałało, musisz mieć poprawne ustawienia dla swojego projektu, a mianowicie settings.py:

  • Upewnij się, że /projectdir/templates/został dodany do TEMPLATE_DIRS.
  • Upewnij się, że django.template.loaders.filesystem.Loaderzostał dodany do TEMPLATE_LOADERS.

Zobacz dokumentację, aby uzyskać więcej informacji na tematsettings.py .


77
Należy również pamiętać, że można {% extends "admin/base.html" %}się /<projectdir>/templates/admin/base_site.htmli po prostu przedefiniować blok (ów) trzeba, tzn {% block branding %}...{% endblock %}.
Arnaud,

12
nawet jeśli jest dość stary, chcę dodać, że musisz umieścić swoją aplikację w miejscu, w którym definiujesz ten szablon przed „django.contrib.admin”, w INSTALLED_APPS
DRC

1
W django 1.6 python 3.3 powyższe działa nawet wtedy, gdy nie dodajesz TEMPLATE_LOADERustawienia. Po prostu TEMPLATE_DIRjest na tyle wydaje
lukik

12
Jest to nieaktualne od 1.7. Zobacz odpowiedź Reto Aebersold.
Andrew B.,

5
Spróbuj tego w url.py admin.site.site_header = „Moja administracja” admin.site.index_title = („Mój administrator”) admin.site.site_title = („Moja strona administracyjna”)
Ashish Gupta

352

Począwszy od Django 1.7, nie musisz zastępować szablonów. Teraz można wdrożyć site_header , site_titleoraz index_titleatrybutów niestandardowych AdminSite aby łatwo zmienić tytuł strony panelu administracyjnego i tekst nagłówka. Utwórz podklasę AdminSite i podłącz instancję do swojego URLconf:

admin.py:

from django.contrib.admin import AdminSite
from django.utils.translation import ugettext_lazy

class MyAdminSite(AdminSite):
    # Text to put at the end of each page's <title>.
    site_title = ugettext_lazy('My site admin')

    # Text to put in each page's <h1> (and above login form).
    site_header = ugettext_lazy('My administration')

    # Text to put at the top of the admin index page.
    index_title = ugettext_lazy('Site administration')

admin_site = MyAdminSite()

urls.py:

from django.conf.urls import patterns, include
from myproject.admin import admin_site

urlpatterns = patterns('',
    (r'^myadmin/', include(admin_site.urls)),
)

Aktualizacja : Jak wskazał oxfn, możesz po prostu ustawić site_headerw swoim urls.pylub admin.pybezpośrednio bez podklasy AdminSite:

admin.site.site_header = 'My administration'

11
Powoduje to wyświetlenie komunikatu o błędzie „Nie masz uprawnień do edytowania czegokolwiek”, gdy próbuję uzyskać dostęp do / myadmin /. Wygląda na to, że powinienem zadzwonić do .autodiscover, ale Django 1.7 powinien zostać wywołany automatycznie. Jakieś wskazówki?
David Arcos

3
@DavidArcos Musisz zarejestrować swoje modele w nowo admin_siteutworzonym. Jakadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev

1
Jeśli również nagłówek w django.auth.views powinien zostać dostosowany (zależy to od admin/base_site.htmlszablonu, np. Reset_hasła ), to również extra_contextpowinien zostać użyty w adresach URL: np.url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer

W ten sposób należy wiedzieć, że będzie on działał tylko ze standardowymi stronami administracyjnymi, jeśli po swojej stronie w innej aplikacji dodajesz własne strony administracyjne (rozszerzenie szablonu podstawowego administratora), zawsze przyjmą domyślną „Administrację Django” tytuł.
Kedare

1
@oxfn Jeśli mam więcej niż jedną aplikację, admin.site.site_headerkonfiguracja, która zadziała app*/admin.py?
nalzok

196

Istnieje prosty sposób na ustawienie nagłówka strony administratora - przypisz go do bieżącej instancji administratora w urls.pyten sposób

admin.site.site_header = 'My admin'

Albo można zaimplementować magię budowania nagłówka osobną metodą

admin.site.site_header = get_admin_header()

Dlatego w prostych przypadkach nie ma potrzeby dokonywania podklasy AdminSite


1
Pierwszy sposób zadziałał. W tej chwili nie wiem, na czym polega problem. dziękuję
Alex Jolig,

4
Jeśli zmieniasz nagłówek, ty pewnie też chcą zmienić tytuł strony, które mogą być realizowane z: admin.site.site_title = 'My site admin'.
mcastle

1
Oto ciąg importu, który można dodać do urls.py:from django.contrib import admin
ser

4
Żałuję, że nie znalazłem tego pierwszego ... Po zapoznaniu się z dokumentami, podklasowałem AdminSitei spędziłem trochę czasu próbując sprawić, by to działało, autodiscover()ale w końcu sam pomyślałem o tym rozwiązaniu. W rzeczywistości mam moje zastąpienie admin.py, które moim zdaniem jest czystsze, ponieważ jest przechowywane wraz z całą pozostałą logiką związaną z administracją
user193130 19.04.2016

1
sprawdź listę wszystkich atrybutów, które możesz zmienić na docs.djangoproject.com/en/1.11/ref/contrib/admin/…
Sergio Morstabilini

96

W urls.pymożesz zastąpić 3 najważniejsze zmienne:

from django.contrib import admin

admin.site.site_header = 'My project'                    # default: "Django Administration"
admin.site.index_title = 'Features area'                 # default: "Site administration"
admin.site.site_title = 'HTML title from adminsitration' # default: "Django site admin"

Odniesienie: Dokumentacja Django dotycząca tych atrybutów .


65

Proste kompletne rozwiązanie w Django 1.8.3 oparte na odpowiedziach na to pytanie.

W settings.pydodatku:

ADMIN_SITE_HEADER = "My shiny new administration"

W urls.pydodatku:

from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER

7
Czy jest lepsze miejsce na zrobienie tego niż używanie adresu urls.py?
Venkat Kotra

2
@VenkatKotra Tak, w admin.py. Jeśli jeszcze go nie masz, po prostu utwórz go i nie zapomnij dodać from django.contrib import admin.
user193130 19.04.2016

3
Zalecany sposób importowania ustawień to poprzez - „z ustawień importu django.conf” (patrz docs.djangoproject.com/en/1.9/topics/settings/… )
yoniLavi

1
Nie ma ustawienia, na które patrzy Django ADMIN_SITE_HEADER, jedyne, co się tutaj liczy, to wiersz wurls.py
Flimm

16

Najłatwiej to zrobić, upewnij się, że masz

from django.contrib import admin

a następnie dodaj je na dole url.pygłównej aplikacji

admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin" 

15

W przypadku Django 2.1.1 dodaj następujące wiersze do urls.py

from django.contrib import admin

# Admin Site Config
admin.sites.AdminSite.site_header = 'My site admin header'
admin.sites.AdminSite.site_title = 'My site admin title'
admin.sites.AdminSite.index_title = 'My site admin index'

10

Jak widać w szablonach , tekst jest dostarczany za pośrednictwem struktury lokalizacji (zwróć uwagę na użycie transznacznika szablonu). Możesz dokonać zmian w plikach tłumaczeń, aby zastąpić tekst bez tworzenia własnej kopii szablonów.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Edytuj locale/en/LC_MESSAGES/django.po, dodając następujące linie:

    msgid "Django site admin"
    msgstr "MySite site admin"
    
    msgid "Django administration"
    msgstr "MySite administration"
  4. ./manage.py compilemessages

Zobacz https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files


1
To okropne rozwiązanie. Zastępowanie ciągów tłumaczeń to po prostu okropny pomysł.

5

admin.py:

from django.contrib.admin import AdminSite

AdminSite.site_title = ugettext_lazy('My Admin')

AdminSite.site_header = ugettext_lazy('My Administration')

AdminSite.index_title = ugettext_lazy('DATA BASE ADMINISTRATION')

1
from django.utils.translation import ugettext_lazy Nie zapomnij dodać tej linii.
rkdevs

5

Przede wszystkim należy dodać szablony / admin / base_site.html do swojego projektu. Ten plik można bezpiecznie zastąpić, ponieważ jest to plik, który deweloperzy Django zamieścili właśnie w tym celu, aby nieco dostosować stronę administratora. Oto przykład tego, co należy umieścić w pliku:

{% extends "admin/base.html" %}
{% load i18n %}

{% block title %}{{ title }} | {% trans 'Some Organisation' %}{% endblock %}

{% block branding %}
<style type="text/css">
  #header
  {
    /* your style here */
  }
</style>
<h1 id="site-name">{% trans 'Organisation Website' %}</h1>
{% endblock %}

{% block nav-global %}{% endblock %}

To jest powszechna praktyka. Zauważyłem jednak, że nadal mam irytujące „Administrowanie witryną” na głównej stronie indeksu administratora. I ten ciąg nie był w żadnym z szablonów, ale był ustawiony w widoku administratora. Na szczęście łatwo to zmienić. Zakładając, że Twój język jest ustawiony na angielski, uruchom następujące polecenia z katalogu projektu:

$ mkdir locale
$ ./manage.py makemessages -l en

Teraz otwórz plik locale / pl / LC_MESSAGES / django.po i dodaj dwa wiersze po informacji nagłówka (ostatnie dwa wiersze tego przykładu)

"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-03 03:25+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "Site administration"
msgstr "Main administration index"

Następnie pamiętaj, aby uruchomić następujące polecenie i ponownie załadować serwer projektu:

$ ./manage.py compilemessages

źródło: http://overtag.dk/wordpress/2010/04/changing-the-django-admin-site-title/


Linkowanie do stron zewnętrznych jest uważane za złe, ponieważ link może się zepsuć. Zachęcamy do przepisania odpowiedzi z tej strony tutaj.

Przepisałem odpowiedź na wypadek, gdybyś nie chciał wyjść poza witrynę.
Soroosh

5

Od Django 2.0 możesz po prostu dodać pojedynczą linię do url.pyi zmienić nazwę.

# url.py

from django.contrib import admin 
admin.site.site_header = "My Admin Central" # Add this

Dla starszych wersji Django. (<1.11 i wcześniejsze) musisz edytowaćadmin/base_site.html

Zmień tę linię

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

do

{% block title %}{{ title }} | {{ site_title|default:_('Your Site name Admin Central') }}{% endblock %}

Możesz sprawdzić swoją djangowersję przez

django-admin --version

5

Wystarczy przejść do pliku admin.py i dodać ten wiersz do pliku:

admin.site.site_header = "My Administration"


3

nie musisz zmieniać żadnego szablonu dla tej pracy, wystarczy zaktualizować settings.pyswój projekt. Idź na dół settings.pyi zdefiniuj to.

admin.site.site_header = 'My Site Admin'

W ten sposób będziesz mógł zmienić nagłówek administratora Django. Ponadto możesz przeczytać więcej o dostosowywaniu i ustawieniach administratora Django pod poniższym linkiem.

Dokumentacja administracyjna Django



3

Można to zrobić na dwa sposoby:

1] Przesłaniając base_site.htmlw django/contrib/admin/templates/admin/base_site.html: Poniżej znajduje się treść base_site.html:

{% extends "admin/base.html" %}

{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}

{% block nav-global %}{% endblock %}

Edytuj site_title i site_header w powyższym fragmencie kodu. Ta metoda działa, ale nie jest zalecana, ponieważ jest to zmiana statyczna.

2] Dodając następujące wiersze w urls.pykatalogu projektu:

admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"

Ta metoda jest zalecana, ponieważ możemy zmienić nagłówek strony, tytuł strony i tytuł indeksu bez edycji base_site.html.


2

Ponieważ używam tylko interfejsu administratora w swojej aplikacji, umieszczam to w admin.py:

admin.site.site_header = 'My administration'

1

Po prostu przesłonisz admin/base_site.htmlszablon (skopiujesz szablon django.contrib.admin.templatesi umieścisz w swoim własnym katalogu administratora) i zastąpisz brandingblok.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.