Jak zmienić tekst „Administracja Django” w nagłówku administratora django?
Wydaje się, że nie jest to uwzględnione w dokumentacji „Dostosowywanie administratora”.
Jak zmienić tekst „Administracja Django” w nagłówku administratora django?
Wydaje się, że nie jest to uwzględnione w dokumentacji „Dostosowywanie administratora”.
Odpowiedzi:
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.html
szablon 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
:
/projectdir/templates/
został dodany do TEMPLATE_DIRS
.django.template.loaders.filesystem.Loader
został dodany do TEMPLATE_LOADERS
.Zobacz dokumentację, aby uzyskać więcej informacji na tematsettings.py
.
{% extends "admin/base.html" %}
się /<projectdir>/templates/admin/base_site.html
i po prostu przedefiniować blok (ów) trzeba, tzn {% block branding %}...{% endblock %}
.
TEMPLATE_LOADER
ustawienia. Po prostu TEMPLATE_DIR
jest na tyle wydaje
Począwszy od Django 1.7, nie musisz zastępować szablonów. Teraz można wdrożyć site_header , site_title
oraz index_title
atrybutó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_header
w swoim urls.py
lub admin.py
bezpośrednio bez podklasy AdminSite
:
admin.site.site_header = 'My administration'
admin_site
utworzonym. Jakadmin_site.register(MyModel, ModelAdmin)
admin/base_site.html
szablonu, np. Reset_hasła ), to również extra_context
powinien 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"}})
admin.site.site_header
konfiguracja, która zadziała app*/admin.py
?
Istnieje prosty sposób na ustawienie nagłówka strony administratora - przypisz go do bieżącej instancji administratora w urls.py
ten 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
admin.site.site_title = 'My site admin'
.
urls.py
:from django.contrib import admin
AdminSite
i 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ą
W urls.py
moż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 .
Proste kompletne rozwiązanie w Django 1.8.3 oparte na odpowiedziach na to pytanie.
W settings.py
dodatku:
ADMIN_SITE_HEADER = "My shiny new administration"
W urls.py
dodatku:
from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
admin.py
. Jeśli jeszcze go nie masz, po prostu utwórz go i nie zapomnij dodać from django.contrib import admin
.
ADMIN_SITE_HEADER
, jedyne, co się tutaj liczy, to wiersz wurls.py
Najłatwiej to zrobić, upewnij się, że masz
from django.contrib import admin
a następnie dodaj je na dole url.py
głównej aplikacji
admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin"
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'
Jak widać w szablonach , tekst jest dostarczany za pośrednictwem struktury lokalizacji (zwróć uwagę na użycie trans
znacznika szablonu). Możesz dokonać zmian w plikach tłumaczeń, aby zastąpić tekst bez tworzenia własnej kopii szablonów.
mkdir locale
./manage.py makemessages
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"
./manage.py compilemessages
Zobacz https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files
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')
from django.utils.translation import ugettext_lazy
Nie zapomnij dodać tej linii.
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/
Od Django 2.0 możesz po prostu dodać pojedynczą linię do url.py
i 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ą django
wersję przez
django-admin --version
Wystarczy przejść do pliku admin.py i dodać ten wiersz do pliku:
admin.site.site_header = "My Administration"
nie musisz zmieniać żadnego szablonu dla tej pracy, wystarczy zaktualizować settings.py
swój projekt. Idź na dół settings.py
i 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.
Można to zrobić na dwa sposoby:
1] Przesłaniając base_site.html
w 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.py
katalogu 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
.
Po prostu przesłonisz admin/base_site.html
szablon (skopiujesz szablon django.contrib.admin.templates
i umieścisz w swoim własnym katalogu administratora) i zastąpisz branding
blok.