Как изменить надпись администрирование django

How does one change the 'Django administration' text in the django admin header? It doesn't seem to be covered in the "Customizing the admin" documentation.

How does one change the ‘Django administration’ text in the django admin header?

It doesn’t seem to be covered in the «Customizing the admin» documentation.

asked Feb 8, 2011 at 21:10

samurailawngnome's user avatar

samurailawngnomesamurailawngnome

3,3053 gold badges18 silver badges16 bronze badges

2

As of Django 1.7 you don’t need to override templates. You can now implement site_header, site_title, and index_title attributes on a custom AdminSite in order to easily change the admin site’s page title and header text. Create an AdminSite subclass and hook your instance into your 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)),
)

Update: As pointed out by oxfn you can simply set the site_header in your urls.py or admin.py directly without subclassing AdminSite:

admin.site.site_header = 'My administration'

maciek's user avatar

maciek

3,0982 gold badges26 silver badges32 bronze badges

answered Jul 27, 2014 at 16:53

Reto Aebersold's user avatar

Reto AebersoldReto Aebersold

16.1k5 gold badges55 silver badges73 bronze badges

7

There is an easy way to set admin site header — assign it to current admin instance in urls.py like this

admin.site.site_header = 'My admin'

Or one can implement some header-building magic in separate method

admin.site.site_header = get_admin_header()

Thus, in simple cases there’s no need to subclass AdminSite

answered Sep 24, 2014 at 8:11

oxfn's user avatar

8

In urls.py you can override the 3 most important variables:

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"

Reference: Django documentation on these attributes.

sunwarr10r's user avatar

sunwarr10r

4,2157 gold badges51 silver badges106 bronze badges

answered Mar 27, 2016 at 19:39

Gregory's user avatar

GregoryGregory

5,9944 gold badges27 silver badges26 bronze badges

2

Update: If you are using Django 1.7+, see the answer below.


Original answer from 2011:
You need to create your own admin base_site.html template to do this. The easiest way is to create the file:

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

This should be a copy of the original base_site.html, except putting in your custom title:

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

For this to work, you need to have the correct settings for your project, namely in settings.py:

  • Make sure /projectdir/templates/ is added into TEMPLATE_DIRS.
  • Make sure django.template.loaders.filesystem.Loader is added into TEMPLATE_LOADERS.

See docs for more information on settings.py.

daaawx's user avatar

daaawx

3,1232 gold badges16 silver badges16 bronze badges

answered Feb 8, 2011 at 21:27

user608133's user avatar

user608133user608133

1,7771 gold badge10 silver badges3 bronze badges

6

A simple complete solution in Django 1.8.3 based on answers in this question.

In settings.py add:

ADMIN_SITE_HEADER = "My shiny new administration"

In urls.py add:

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

answered Jul 30, 2015 at 8:25

kuzavas's user avatar

kuzavaskuzavas

2,1561 gold badge16 silver badges8 bronze badges

5

For Django 2.1.1 add following lines to 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'

answered Sep 16, 2018 at 2:24

Ganesh's user avatar

GaneshGanesh

2,8712 gold badges18 silver badges27 bronze badges

The easiest way of doing it
make sure you have

from django.contrib import admin

and then just add these at bottom of url.py of you main application

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

answered Mar 29, 2017 at 21:08

Muhammad Abrar Anwar's user avatar

0

Hope am not too late to the party, The easiest would be to edit the admin.py file.

admin.site.site_header = 'your_header'
admin.site.site_title = 'site_title'
admin.site.index_title = 'index_title'

answered Jan 20, 2021 at 1:30

Kevin Owino's user avatar

Kevin OwinoKevin Owino

3892 silver badges6 bronze badges

Simple Method is add following code in your url.py

    urlpatterns = [
    #Your URLS here
    path('admin/', admin.site.urls),
]

admin.site.site_header = 'SiteName Admin'
admin.site.site_title  = 'SiteName'
admin.site.index_title   = 'Admin'

answered Apr 6, 2022 at 7:11

Mohammed Jaseem K's user avatar

As you can see in the templates, the text is delivered via the localization framework (note the use of the trans template tag). You can make changes to the translation files to override the text without making your own copy of the templates.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Edit locale/en/LC_MESSAGES/django.po, adding these lines:

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

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

Community's user avatar

answered Feb 14, 2012 at 22:29

Wedgwood's user avatar

WedgwoodWedgwood

9739 silver badges10 bronze badges

1

From Django 2.0 you can just add a single line in the url.py and change the name.

# url.py

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

For older versions of Django. (<1.11 and earlier) you need to edit admin/base_site.html

Change this line

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

to

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

You can check your django version by

django-admin --version

answered Feb 29, 2020 at 9:35

Trect's user avatar

TrectTrect

2,6212 gold badges28 silver badges35 bronze badges

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

Avantol13's user avatar

Avantol13

1,00911 silver badges21 bronze badges

answered Mar 13, 2017 at 17:56

Fakher Meddeb's user avatar

1

Just go to admin.py file and add this line in the file :

admin.site.site_header = "My Administration"

answered Apr 22, 2020 at 13:57

Prateek Gupta's user avatar

Prateek GuptaPrateek Gupta

2,3282 gold badges15 silver badges30 bronze badges

There are two methods to do this:

1] By overriding base_site.html in django/contrib/admin/templates/admin/base_site.html:
Following is the content of 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 %}

Edit the site_title & site_header in the above code snippet. This method works but it is not recommendable since its a static change.

2] By adding following lines in urls.py of project’s directory:

admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"
admin.site.site_url = "Url for view site button"

This method is recommended one since we can change the site-header, site-title & index-title without editing base_site.html.

Jesvin Vijesh S's user avatar

answered Jan 28, 2020 at 10:44

Pranav Bhendawade's user avatar

First of all, you should add templates/admin/base_site.html to your project. This file can safely be overwritten since it’s a file that the Django devs have intended for the exact purpose of customizing your admin site a bit. Here’s an example of what to put in the file:

{% 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 %}

This is common practice. But I noticed after this that I was still left with an annoying “Site Administration” on the main admin index page. And this string was not inside any of the templates, but rather set inside the admin view. Luckily it’s quite easy to change. Assuming your language is set to English, run the following commands from your project directory:

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

Now open up the file locale/en/LC_MESSAGES/django.po and add two lines after the header information (the last two lines of this example)

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

msgid "Site administration"
msgstr "Main administration index"

After this, remember to run the following command and reload your project’s server:

$ ./manage.py compilemessages

source: http://overtag.dk/wordpress/2010/04/changing-the-django-admin-site-title/

answered Jul 14, 2013 at 21:50

Soroosh's user avatar

SorooshSoroosh

4891 gold badge7 silver badges18 bronze badges

2

Use format_html to allow html to be rendered, otherwise it will be just plain text.

in your main urls.py file add followings(urls.py is in the directory where settings.py exist):

from django.contrib import admin
from django.utils.html import format_html

site_header = 'Your html snippet'
admin.site.site_header = format_html(site_header)

answered May 31, 2021 at 8:21

Janaka R Rajapaksha's user avatar

1

You can use these following lines in your main urls.py

you can add the text in the quotes to be displayed

To replace the text Django admin use admin.site.site_header = ""

To replace the text Site Administration use admin.site.site_title = ""

To replace the site name you can use admin.site.index_title = ""

To replace the url of the view site button you can use admin.site.site_url = ""

answered Jul 6, 2020 at 6:28

Jesvin Vijesh S's user avatar

Jesvin Vijesh SJesvin Vijesh S

6691 gold badge9 silver badges26 bronze badges

you do not need to change any template for this work you just need to update the settings.py of your project. Go to the bottom of the settings.py and define this.

admin.site.site_header = 'My Site Admin'

In this way you would be able to change the header of the of the Django admin. Moreover you can read more about Django Admin customization and settings on the following link.

Django Admin Documentation

answered Apr 12, 2016 at 13:37

Chitrank Dixit's user avatar

Chitrank DixitChitrank Dixit

3,8614 gold badges37 silver badges58 bronze badges

You can use AdminSite.site_header to change that text. Here is the docs

answered Aug 12, 2017 at 8:25

YasinYA's user avatar

YasinYAYasinYA

1092 silver badges6 bronze badges

You just override the admin/base_site.html template (copy the template from django.contrib.admin.templates and put in your own admin template dir) and replace the branding block.

answered Feb 8, 2011 at 21:25

Yuji 'Tomita' Tomita's user avatar

Since I only use admin interface in my app, I put this in the admin.py :

admin.site.site_header = 'My administration'

answered Apr 12, 2016 at 13:27

numahell's user avatar

numahellnumahell

1311 silver badge2 bronze badges

One easy method is to include the following code in the urls.py file located in your project folder.

 in urls.py add 

  admin.site.site_header  =  "Site Header here"  
  admin.site.site_title  =  "Side title"
  admin.site.index_title  =  "Index title"

For example:

from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from django.conf.urls.static import static
from django.conf import settings


admin.site.site_header  =  "Hadramawt Kitchen"  
admin.site.site_title  =  "Hadramawt Kitchen"
admin.site.index_title  =  "Hadramawt Admin"

urlpatterns = [
  path('admin/', admin.site.urls),
  path('', include('food_products.urls' )),
  path('categories', include('categories.urls' )),
  path('news', include('news.urls')),
  path('weeklyOffer', include('weekly_offer.urls'))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

answered Jan 14 at 15:55

Mohammed Jaseem Tp's user avatar

How does one change the ‘Django administration’ text in the django admin header?

It doesn’t seem to be covered in the «Customizing the admin» documentation.

asked Feb 8, 2011 at 21:10

samurailawngnome's user avatar

samurailawngnomesamurailawngnome

3,3053 gold badges18 silver badges16 bronze badges

2

As of Django 1.7 you don’t need to override templates. You can now implement site_header, site_title, and index_title attributes on a custom AdminSite in order to easily change the admin site’s page title and header text. Create an AdminSite subclass and hook your instance into your 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)),
)

Update: As pointed out by oxfn you can simply set the site_header in your urls.py or admin.py directly without subclassing AdminSite:

admin.site.site_header = 'My administration'

maciek's user avatar

maciek

3,0982 gold badges26 silver badges32 bronze badges

answered Jul 27, 2014 at 16:53

Reto Aebersold's user avatar

Reto AebersoldReto Aebersold

16.1k5 gold badges55 silver badges73 bronze badges

7

There is an easy way to set admin site header — assign it to current admin instance in urls.py like this

admin.site.site_header = 'My admin'

Or one can implement some header-building magic in separate method

admin.site.site_header = get_admin_header()

Thus, in simple cases there’s no need to subclass AdminSite

answered Sep 24, 2014 at 8:11

oxfn's user avatar

8

In urls.py you can override the 3 most important variables:

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"

Reference: Django documentation on these attributes.

sunwarr10r's user avatar

sunwarr10r

4,2157 gold badges51 silver badges106 bronze badges

answered Mar 27, 2016 at 19:39

Gregory's user avatar

GregoryGregory

5,9944 gold badges27 silver badges26 bronze badges

2

Update: If you are using Django 1.7+, see the answer below.


Original answer from 2011:
You need to create your own admin base_site.html template to do this. The easiest way is to create the file:

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

This should be a copy of the original base_site.html, except putting in your custom title:

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

For this to work, you need to have the correct settings for your project, namely in settings.py:

  • Make sure /projectdir/templates/ is added into TEMPLATE_DIRS.
  • Make sure django.template.loaders.filesystem.Loader is added into TEMPLATE_LOADERS.

See docs for more information on settings.py.

daaawx's user avatar

daaawx

3,1232 gold badges16 silver badges16 bronze badges

answered Feb 8, 2011 at 21:27

user608133's user avatar

user608133user608133

1,7771 gold badge10 silver badges3 bronze badges

6

A simple complete solution in Django 1.8.3 based on answers in this question.

In settings.py add:

ADMIN_SITE_HEADER = "My shiny new administration"

In urls.py add:

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

answered Jul 30, 2015 at 8:25

kuzavas's user avatar

kuzavaskuzavas

2,1561 gold badge16 silver badges8 bronze badges

5

For Django 2.1.1 add following lines to 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'

answered Sep 16, 2018 at 2:24

Ganesh's user avatar

GaneshGanesh

2,8712 gold badges18 silver badges27 bronze badges

The easiest way of doing it
make sure you have

from django.contrib import admin

and then just add these at bottom of url.py of you main application

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

answered Mar 29, 2017 at 21:08

Muhammad Abrar Anwar's user avatar

0

Hope am not too late to the party, The easiest would be to edit the admin.py file.

admin.site.site_header = 'your_header'
admin.site.site_title = 'site_title'
admin.site.index_title = 'index_title'

answered Jan 20, 2021 at 1:30

Kevin Owino's user avatar

Kevin OwinoKevin Owino

3892 silver badges6 bronze badges

Simple Method is add following code in your url.py

    urlpatterns = [
    #Your URLS here
    path('admin/', admin.site.urls),
]

admin.site.site_header = 'SiteName Admin'
admin.site.site_title  = 'SiteName'
admin.site.index_title   = 'Admin'

answered Apr 6, 2022 at 7:11

Mohammed Jaseem K's user avatar

As you can see in the templates, the text is delivered via the localization framework (note the use of the trans template tag). You can make changes to the translation files to override the text without making your own copy of the templates.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Edit locale/en/LC_MESSAGES/django.po, adding these lines:

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

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

Community's user avatar

answered Feb 14, 2012 at 22:29

Wedgwood's user avatar

WedgwoodWedgwood

9739 silver badges10 bronze badges

1

From Django 2.0 you can just add a single line in the url.py and change the name.

# url.py

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

For older versions of Django. (<1.11 and earlier) you need to edit admin/base_site.html

Change this line

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

to

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

You can check your django version by

django-admin --version

answered Feb 29, 2020 at 9:35

Trect's user avatar

TrectTrect

2,6212 gold badges28 silver badges35 bronze badges

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

Avantol13's user avatar

Avantol13

1,00911 silver badges21 bronze badges

answered Mar 13, 2017 at 17:56

Fakher Meddeb's user avatar

1

Just go to admin.py file and add this line in the file :

admin.site.site_header = "My Administration"

answered Apr 22, 2020 at 13:57

Prateek Gupta's user avatar

Prateek GuptaPrateek Gupta

2,3282 gold badges15 silver badges30 bronze badges

There are two methods to do this:

1] By overriding base_site.html in django/contrib/admin/templates/admin/base_site.html:
Following is the content of 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 %}

Edit the site_title & site_header in the above code snippet. This method works but it is not recommendable since its a static change.

2] By adding following lines in urls.py of project’s directory:

admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"
admin.site.site_url = "Url for view site button"

This method is recommended one since we can change the site-header, site-title & index-title without editing base_site.html.

Jesvin Vijesh S's user avatar

answered Jan 28, 2020 at 10:44

Pranav Bhendawade's user avatar

First of all, you should add templates/admin/base_site.html to your project. This file can safely be overwritten since it’s a file that the Django devs have intended for the exact purpose of customizing your admin site a bit. Here’s an example of what to put in the file:

{% 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 %}

This is common practice. But I noticed after this that I was still left with an annoying “Site Administration” on the main admin index page. And this string was not inside any of the templates, but rather set inside the admin view. Luckily it’s quite easy to change. Assuming your language is set to English, run the following commands from your project directory:

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

Now open up the file locale/en/LC_MESSAGES/django.po and add two lines after the header information (the last two lines of this example)

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

msgid "Site administration"
msgstr "Main administration index"

After this, remember to run the following command and reload your project’s server:

$ ./manage.py compilemessages

source: http://overtag.dk/wordpress/2010/04/changing-the-django-admin-site-title/

answered Jul 14, 2013 at 21:50

Soroosh's user avatar

SorooshSoroosh

4891 gold badge7 silver badges18 bronze badges

2

Use format_html to allow html to be rendered, otherwise it will be just plain text.

in your main urls.py file add followings(urls.py is in the directory where settings.py exist):

from django.contrib import admin
from django.utils.html import format_html

site_header = 'Your html snippet'
admin.site.site_header = format_html(site_header)

answered May 31, 2021 at 8:21

Janaka R Rajapaksha's user avatar

1

You can use these following lines in your main urls.py

you can add the text in the quotes to be displayed

To replace the text Django admin use admin.site.site_header = ""

To replace the text Site Administration use admin.site.site_title = ""

To replace the site name you can use admin.site.index_title = ""

To replace the url of the view site button you can use admin.site.site_url = ""

answered Jul 6, 2020 at 6:28

Jesvin Vijesh S's user avatar

Jesvin Vijesh SJesvin Vijesh S

6691 gold badge9 silver badges26 bronze badges

you do not need to change any template for this work you just need to update the settings.py of your project. Go to the bottom of the settings.py and define this.

admin.site.site_header = 'My Site Admin'

In this way you would be able to change the header of the of the Django admin. Moreover you can read more about Django Admin customization and settings on the following link.

Django Admin Documentation

answered Apr 12, 2016 at 13:37

Chitrank Dixit's user avatar

Chitrank DixitChitrank Dixit

3,8614 gold badges37 silver badges58 bronze badges

You can use AdminSite.site_header to change that text. Here is the docs

answered Aug 12, 2017 at 8:25

YasinYA's user avatar

YasinYAYasinYA

1092 silver badges6 bronze badges

You just override the admin/base_site.html template (copy the template from django.contrib.admin.templates and put in your own admin template dir) and replace the branding block.

answered Feb 8, 2011 at 21:25

Yuji 'Tomita' Tomita's user avatar

Since I only use admin interface in my app, I put this in the admin.py :

admin.site.site_header = 'My administration'

answered Apr 12, 2016 at 13:27

numahell's user avatar

numahellnumahell

1311 silver badge2 bronze badges

One easy method is to include the following code in the urls.py file located in your project folder.

 in urls.py add 

  admin.site.site_header  =  "Site Header here"  
  admin.site.site_title  =  "Side title"
  admin.site.index_title  =  "Index title"

For example:

from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from django.conf.urls.static import static
from django.conf import settings


admin.site.site_header  =  "Hadramawt Kitchen"  
admin.site.site_title  =  "Hadramawt Kitchen"
admin.site.index_title  =  "Hadramawt Admin"

urlpatterns = [
  path('admin/', admin.site.urls),
  path('', include('food_products.urls' )),
  path('categories', include('categories.urls' )),
  path('news', include('news.urls')),
  path('weeklyOffer', include('weekly_offer.urls'))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

answered Jan 14 at 15:55

Mohammed Jaseem Tp's user avatar

Архив проекта: lesson-24-coolsite.zip

На этом занятии
мы сделаем некоторые изменения в админ-панели, настроим ее под свой
разрабатываемый сайт. Если перейти в документацию по Django, то на
официальной странице:

https://docs.djangoproject.com/en/3.1/

есть раздел «Admin» и ссылка «Admin site», где подробно
объясняются различные нюансы настройки админ-панели. Это огромная тема,
поэтому, мы коснемся лишь некоторых базовых вещей.

Меняем стили оформления

Вначале давайте
посмотрим, как можно поменять стили оформления админ-панели. Это бывает
необходимо, чтобы админка визуально выглядела в тех же тонах, что и основной
сайт. Для этого, мы с помощью панели Debug Toolbar посмотрим какие
используются шаблоны для формирования этой страницы:

  • admin/index.html

    D:\Python\django\djsite\venv\lib\site-packages\django\contrib\admin\templates\admin\index.html

  • admin/base_site.html

    D:\Python\django\djsite\venv\lib\site-packages\django\contrib\admin\templates\admin\base_site.html

  • admin/base.html

    D:\Python\django\djsite\venv\lib\site-packages\django\contrib\admin\templates\admin\base.html

  • admin/app_list.html

    D:\Python\django\djsite\venv\lib\site-packages\django\contrib\admin\templates\admin\app_list.html

Здесь нам
показываются четыре шаблона и по названию можно понять, что базовым для страниц
сайта является шаблон base_site.html. Также под ним прописан путь, где он
располагается.

Давайте, откроем
его и по идее, конечно, можно было бы внести изменения прямо здесь. Но это не
лучшая практика. Все дополнительные файлы, которые были сформированы при
установке Django, лучше
оставлять без изменений. А переопределение делать уже непосредственно в нашем
проекте. В частности, если добавить в каталог coolsite/templates подкаталог admin и там
разместить файл с тем же именем base_site.html, то Django, сканируя
первым этот каталог, найдет первым файл admin/base_site.html и именно его
будет использовать.

Создадим такой
файл. Перейдем в браузер, обновим страницу админ-панели и не увидим никаких
изменений. Мало того, если посмотреть в Debug Toolbar, то путь к
шаблону base_site.html остался прежним.
Что не так? Дело в том, что Django по умолчанию ищет шаблоны
исключительно в папках приложений. У нас же каталог templates находится
непосредственно в корне проекта, что необходимо, чтобы произошло
переопределение шаблона base_site.html. Этот новый,
нестандартный путь следует указать в файле конфигурации settings.py в коллекции TEMPLATES:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
...
    },
]

Теперь, после
перезапуска веб-сервера и обновлении админ-панели увидим пустую страницу, т.к.
именно наш шаблон сейчас был взят. Скопируем в него содержимое из аналогичного
файла админки и при обновлении видим все ту же админку.

В файле base_site.html видим три
блока:

  • block title – отвечает за
    отображение заголовка во вкладке;

  • block branding – за
    отображение ссылки «Администрирование Django» в верхней панели;

  • block nav-global
    – глобальный блок навигации.

Сейчас мы хотим
прописать свои собственные стили оформления. Как это сделать? Для этого откроем
шаблон более верхнего уровня base.html и видим
специальный блок:

{% block
extrastyle %}{% endblock %}

который служит
для добавления дополнительных стилей оформления. Пропишем его в файле base_site.html и в нем укажем
свой файл оформления:

{% block extrastyle %}
<link rel="stylesheet" href="{% static 'css/admin.css' %}">
{% endblock %}

Соответственно,
выше загрузим тег static:

и сформируем
файл admin.css в нашем
приложении в каталоге static/css:

#header {
    background: #5e3a00;
}

Почему мы
прописали именно такой селектор для изменения цвета верхней панели? Очень
просто. Если перейти в браузер и проинспектировать этот элемент, то увидим тег div с id=»header». Значит,
для назначения свойств, можно использовать этот идентификатор. По аналогии
можно переобозначать стили для всех других элементов админ-панели. Например,
такой же стиль пропишем и для заголовков блоков:

#header, .module caption {
    background: #5e3a00;
}

Я думаю, общий
принцип понятен. Этим способом можно переопределить все стили и настроить вид
админки под дизайн, цветовую схему вашего сайта.

Если же вам
нужно изменить сам заголовок «Администрирование Django», то это лучше
делать через модуль admin (файл women/admin.py), в котором,
следует определить два таких атрибута:

admin.site.site_title = 'Админ-панель сайта о женщинах'
admin.site.site_header = 'Админ-панель сайта о женщинах'

Полный список
подобных атрибутов можно посмотреть на странице документации:

https://docs.djangoproject.com/en/3.1/ref/contrib/admin/

Добавляем отображение изображений для постов в списке

Следующим шагом
добавим отображение миниатюр изображений, связанных с нашими постами,
непосредственно в списке. Сейчас у нас происходит отображение пути к
изображению в колонке «Фото». Мы же хотим показывать непосредственно
изображение, а не путь. Как это сделать?

Для этого в
классе WomenAdmin (файл women/admin.py) следует
прописать метод, который бы возвращал HTML-код. И этот HTML-фрагмент,
затем, подставим вместо путей. Имя метода мы придумываем сами, например, так:

    def get_html_photo(self, object):
        return mark_safe(f"<img src='{object.photo.url}' width=50>")

Этот метод будет
принимать второй параметр object – ссылку на
текущую запись (на текущий пост) и, затем, возвращаем фрагмент HTML, но помеченный
фильтром safe, чтобы теги
воспринимались как теги и не экранировались, то есть, не заменялись бы
спецсимволами. Именно для этого и используется функция mark_safe(). Все, если
теперь вместо поля photo (в списке list_display) указать метод get_html_photo:

list_display = ('id', 'title', 'time_create', 'get_html_photo', 'is_published')

должны увидеть
вместо маршрутов картинки, связанные с постами. Однако, у нас отображается
ошибка с исключением ValueError, так как не все посты имеют
изображения. Поэтому в методе get_html_photo следует
прописать проверку:

    def get_html_photo(self, object):
        if object.photo:
            return mark_safe(f"<img src='{object.photo.url}' width=50>")

Причем, по else можно ничего не
возвращать (будет формироваться значение None), тогда Django автоматически
поставит дефис там, где фотография отсутствует. Если же прописать иначе:

    def get_html_photo(self, object):
        if object.photo:
            return mark_safe(f"<img src='{object.photo.url}' width=50>")
        else:
            return "Нет фото"

То вместо дефиса
увидим нашу строку «Нет фото». Наконец, чтобы поменять название столбца (вместо
«GET HTML PHOTO»), нужно у объекта-метода get_html_photo определить
специальный атрибут:

get_html_photo.short_description = "Миниатюра"

Этот пример с
выводом фотографии показывает, как можно заменять стандартный вывод полей
списка на свой собственный, определяя дополнительные специальные методы и
указывая их в списке list_display. То есть,
следуя этому принципу, мы можем формировать самую разную информацию для
отображения в списках.

Наконец, мы
можем сделать вывод фотографии и непосредственно на странице редактирования
поста. Для этого, опять же в классе WomenAdmin (файл women/admin.py) пропишем еще
один атрибут:

fields = ('title', 'slug', 'cat', 'content', 'photo', 'is_published')

Этот атрибут
содержит порядок и список редактируемых полей, которые следует отображать в
форме редактирования. Если же дополнительно нужно показывать не редактируемые
поля, то дополнительно нужно прописать атрибут:

readonly_fields = ('time_create', 'time_update')

И только после
этого, их можно добавить в коллекцию fields:

fields = ('title', 'slug', 'cat', 'content', 'photo', 'is_published', 'time_create', 'time_update')

Отлично, это мы
сделали, но как отобразить миниатюру? Для этого достаточно указать ссылку на
наш метод get_html_photo() в этих
атрибутах:

fields = ('title', 'slug', 'cat', 'content', 'photo', 'get_html_photo', 'is_published', 'time_create', 'time_update')
readonly_fields = ('time_create', 'time_update', 'get_html_photo')

Все, теперь мы
видим изображение загруженной фотографии в форме редактирования.

Чтобы узнать о
других возможностях настройки формы редактирования, на странице документации
можно посмотреть список атрибутов для класса ModelAdmin. В частности,
установка вот такого атрибута:

добавляет верхнюю
панель для управления записью, что бывает очень удобно.

Вот так, можно
настраивать стили и отображение содержимого админ-панели.

Видео по теме

Админ-панель Django выглядит достаточно неплохо: не раздражает цвет, адаптивный дизайн, всё расположено
довольно логично… Тем не менее, многие не хотят видеть надпись «Django», да и а целом разукрасить
админку в «свои цвета».

Изображение Python 3.11. Что нового?

Настраиваем отображение заголовка, вкладки

Самое первое, что бросается в глаза — страница логина, на которой открытым текстом говорится о фреймфорке,
первая страница после логина — также приветствие от Django, да и название вкладки намекает на нашего веб-друга.
Чтобы поменять всё это «безобразие», нужно в admin.py сделать всего 3 настройки:

from django.contrib import admin

admin.site.site_header = "Лучшая админка"
admin.site.site_title = "Панель администрирования"
admin.site.index_title = "Добро пожаловать в админку"

Ну вот и готова наша BolgenCMS — можно уже продавать. Хотя и раньше можно было — лицензия позволяет.
Но если всё же вам важно изменить эти надписи — теперь можете изменить.

Убираем «ненужные» разделы админки

При первом входе в админ-панель Django можно увидеть два раздела для редактирования пользователей и групп.
Если они вам по какой-то причине мешают — их можно также просто убрать. Для этого «разрегистрируем» эти админки:

from django.contrib import admin
from django.contrib.auth.models import User, Group

admin.site.unregister(User)
admin.site.unregister(Group)

В предыдущей заметке о настройке Django
админки мы напротив — регистрировали свою модель в админку. Здесь же мы удаляем «ненужное».

Есть время создавать админки, а есть время их удалять…

Добавляем логотип к нашей админке

Понятно, что у лучшей админки должен быть как минимум свой логотип. Чтобы добавить логотип, нам нужно для начала
включить работу со статическими файлами. Поэтому создадим в корне проекта папку static и зарегистрируем её
в settings.py:

STATIC_URL = '/static/'  # Вот под этой строчкой
STATICFILES_DIRS = [f'{BASE_DIR}/static/']

Добавим в нашу папку для статики файл логотипа pony.png.

Теперь нам нужно переопределить шаблон для заголовка страницы — templates/admin/base_site.html.
Для переопределения шаблонов я обычно завожу отдельную папку либо в главном приложении, либо в корне проекта.
Чтобы это сделать, немного отредактируем переменную TEMPLATES в sessings.py:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [f'{BASE_DIR}/templates/'],  # Изменилась эта строчка
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

Сам файл шаблона заголовка админ-панели создаём в файле templates/admin/base_site.html:

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

{% load static %}

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

{% block branding %}
<h1 id="site-name">
    <a href="{% url 'admin:index' %}">
        <img src="{% static 'pony.png' %}" height="40px" />
        {{ site_header }}
    </a>
</h1>
{% endblock %}

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

Не знаю как у вас, а у меня теперь рядом с заголовком красуется поняшка.

Аналогичным методом можно переопределить и другие шаблоны. Оригиналы можно найти в пакете django,
лежат они в директории django/contrib/admin/templates/admin. Либо же, если просто хотите поменять
что-то в цветовой схеме — можете переопределить файл /static/admin/css/base.css.

Вопрос:

Как изменить текст администрирования Django в заголовке admin django?

Это не похоже на документацию “Настройка админы”.

Лучший ответ:

Обновление: если вы используете Django 1. 7+, см. ответ ниже.


Оригинальный ответ с 2011 года:
Для этого вам нужно создать свой собственный шаблон администратора base_site.html. Самый простой способ – создать файл:

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

Это должна быть копия оригинала base_site.html, за исключением указания собственного заголовка:

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

Чтобы это работало, вам нужно иметь правильные настройки для вашего проекта, а именно в settings.py:

  • Убедитесь, что /projectdir/templates/ добавлен в TEMPLATE_DIRS.
  • Убедитесь, что django.template.loaders.filesystem.Loader добавлен в TEMPLATE_LOADERS.

См. документацию для получения дополнительной информации о settings.py.

Ответ №1

С Django 1.7 вам не нужно переопределять шаблоны. Теперь вы можете реализовать site_header, site_title и index_title в пользовательском AdminSite, чтобы легко изменить заголовок страницы заголовка и заголовок. Создайте подкласс AdminSite и подключите свой экземпляр в 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 <title>.
site_title = ugettext_lazy('My site admin')

# Text to put in each page <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)),
)

Обновление. Как указано oxfn, вы можете просто установить site_header в своих urls.py или admin.py напрямую без подклассом AdminSite:

admin.site.site_header = 'My administration'

Ответ №2

Существует простой способ установить заголовок административного сайта – назначьте его текущему экземпляру администратора в urls.py, как этот

admin.site.site_header = 'My admin'

Или можно реализовать некоторую магию создания заголовков в отдельном методе

admin.site.site_header = get_admin_header()

Таким образом, в простых случаях нет необходимости подкласса AdminSite

Ответ №3

В urls.py вы можете переопределить 3 наиболее важные переменные:

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"

Ссылка: документация Django по этим атрибутам.

Ответ №4

Простое полное решение в Django 1.8.3 на основе ответов в этом вопросе.

В settings.py добавить:

ADMIN_SITE_HEADER = "My shiny new administration"

В urls.py добавить:

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

Ответ №5

Самый простой способ сделать это
убедитесь, что у вас есть

from django.contrib import admin

а затем просто добавьте их внизу url.py основного приложения

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

Ответ №6

Для Django 2.1.1 добавьте следующие строки в 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'

Ответ №7

Как вы можете видеть в templates, текст доставляется через рамки локализации (обратите внимание на использование шаблона trans тег). Вы можете внести изменения в файлы переводов, чтобы переопределить текст, не создавая собственную копию шаблонов.

  • mkdir locale
  • ./manage.py makemessages
  • Измените locale/en/LC_MESSAGES/django.po, добавив следующие строки:

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

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

Ответ №8

Прежде всего, вы должны добавить templates/admin/base_site.html в ваш проект. Этот файл может быть безопасно перезаписан, поскольку это файл, который разработчики Django предназначали для точной настройки вашего сайта администратора. Вот пример того, что положить в файл:

{% 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 %}

Это обычная практика. Но после этого я заметил, что меня все еще раздражает “Администрирование сайта” на главной странице администратора. И эта строка была не внутри какого-либо из шаблонов, а скорее установлена в представлении администратора. К счастью, его довольно легко изменить. Предполагая, что ваш язык установлен на английский, выполните следующие команды из каталога вашего проекта:

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

Теперь откройте файл locale/en/LC_MESSAGES/django.po и добавьте две строки после информации заголовка (последние две строки в этом примере)

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

msgid "Site administration"
msgstr "Main administration index"

После этого не забудьте выполнить следующую команду и перезагрузить сервер проектов:

$ ./manage.py compilemessages

источник: http://overtag.dk/wordpress/2010/04/changing-the-django-admin-site-title/

Ответ №9

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

Ответ №10

вам не нужно менять какой-либо шаблон для этой работы, вам просто нужно обновить settings.py вашего проекта. Перейдите к нижней части settings.py и определите это.

admin.site.site_header = 'My Site Admin'

Таким образом, вы сможете изменить заголовок администратора Django. Кроме того, вы можете узнать больше о настройке и настройках Django Admin по следующей ссылке.

Документация администратора Django

Ответ №11

Вы можете использовать AdminSite.site_header для изменения этого текста. Вот docs

Ответ №12

Так как я использую только админ-интерфейс в своем приложении, я помещаю его в admin.py:

admin.site.site_header = 'My administration'

Ответ №13

Вы просто переопределите шаблон admin/base_site.html (скопируйте шаблон из django.contrib.admin.templates и поместите в свой собственный шаблон шаблона администратора) и замените блок branding.

Ответ №14

Перейдите в файл admin.py и напишите:

from django.contrib.admin import AdminSite

AdminSite.site_header = "Your desired text"

Документация администратора Django может вам помочь.

Django admin — мощное средство, позволяющее упростить создание административной части сайта. Django автоматически создает нужные формы для создания и редактирования данных на сайте. При этом у вас может появится как минимум две причины для изменения админки — сделать ее визуально красивее и изменить формат представления данных.

Для модификации внешнего вида вы вольны использовать свои шаблоны. Также есть готовые приложения, предназначенные для этой цели — такие как Grapelli и Django Suit. Можно прочесть про их использование в статье «Улучшение админки Django«.

Также разработчики Django предоставили возможность сделать работу с объектами в базе более удобной, меняя формы и формат представляемых админкой данных.

Изменение формы добавления новых объектов

Разработчики Django выполнили за нас огромный объем работы. Вам достаточно зарегистрировать вашу модель, чтобы автоматически были созданы формы для добавления новых объектов. В случае с моделью Poll из примера регистрация выполняется командой admin.site.register(Poll), Однако часто вам понадобится изменить вид и работу административной части сайта. В том, что касается ваших моделей, это выполняется параметрами при регистрации объекта.

Давайте для примера переопределим порядок полей на форме редактирования.

Замените строку admin.site.register(Poll) таким кодом:

class PollAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question']

admin.site.register(Poll, PollAdmin)

Все достаточно просто. Вы создаете новый класс для представления объекта в админке и затем передаете его вторым аргументом при регистрации модели.

В приведенном примере дата публикации теперь будет идти перед полем вопроса.

Fields have been reordered

В случае двух полей это не особо принципиально, но когда нужно заполнять объекты с большим количеством данных, интуитивный порядок может значительно повысить удобство работы с ними.

Если мы говорим о формах с сотнями полей для ввода, вы вероятно захотите разбить их, используя fieldsets:

class PollAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Poll, PollAdmin)

Первый элемент в каждом кортеже — заголовок fieldset. Вот как это будет выглядеть:

Form has fieldsets now

Вы можете назначить произвольные HTML классы любому fieldset. Django предлагает класс «collapse» который отобразит выбранный fieldset изначально свернутым. Это удобно, когда данный блок содержит данные, которые редко заполняются:

class PollAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]

Fieldset is initially collapsed

Теперь страничка админки для вашей модели выглядит лучше. Давайте внесем еще несколько изменений в страницу, отображающую список объектов.

Вот как он выглядит изначально:

Polls change list page

По-умолчанию, Django отображает значение функции str() каждого объекта. Иногда удобнее если мы можем отобразить определенные поля. Для этого используйте list_display — кортеж с именами полей, которые в админке будут отображены в качестве столбцов на странице со списком объектов.

class PollAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question', 'pub_date')

Вы также можете добавить любой определенный вами метод.

class PollAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question', 'pub_date', 'was_published_recently')

Теперь список наших объектов будет выглядеть в виде таблицы:

Polls change list page, updated

Вы можете кликнуть на заголовке столбца, чтобы отсортировать таблицу по значениям в данном столбце. Исключением являются столбцы, содержащие вывод определенных вами методов — сортировка по этим значениям не поддерживается. Также отметьте, что по-умолчанию заголовок столбца, отображающего результаты метода was_published_recently — имя метода, в котором символы подчеркивания заменены на пробелы.

Вы можете изменить поведение по-умолчанию, добавив к методу несколько атрибутов — например так:

class Poll(models.Model):
    # ...
    def was_published_recently(self):
        return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'

Добавление фильтров к списку объектов

Отредактируйте файл admin.py,чтобы добавить фильтрацию. Добавьте к классу PollAdmin такую строку:

list_filter = ['pub_date']

Это добавит боковую колонку с названием“Filter”, которая позволит людям отфильтровать значения таблицы по дате публикации в поле pub_date:

Polls change list page, updated

Вид отображаемого фильтра зависит от типа данных. Поскольку pub_date использует тип DateTimeField, Django добавит к фильтру варианты “Any date,” “Today,” “Past 7 days,” “This month,” “This year.”

Добавление поиска объектов в админке

Добавление к классу PollAdmin строки предоставит пользователям возможность поиска:

search_fields = ['question']

Теперь вверху списка появится поле для поиска. Когда кто-то будет вводить туда искомые значения, Django будет искать их в поле question. Вы можете задать так много полей для поиска как вам нужно.

Отображение дат

Поскольку объект Poll хранит даты, будет удобно добавить им иерархию. Добавьте строку:

date_hierarchy = 'pub_date'

Теперь наверху списка появится отображение всех лет, в которых происходила публикация. Когда вы выберете год, появятся месяцы и далее дни.

Изменение внешнего вида админки

Стандартный вариант админки Django не является образцом удобства для пользователей. Например надпись “Django administration” в верхней части каждой страницы не несет никакой полезной нагрузки — это просто кусок текста.

Подобные вещи легко изменить, используя систему шаблонов Django. Админская часть сайта на Django построена на самой Django и полностью поддерживает ее систему шаблонов.

Изменение шаблонов проекта

Создайте каталог templates в каталоге вашего проекта. Шаблоны могут находится везде, где Django может получить к ним доступ. Однако размещение шаблонов в каталоге проекта — это удобное соглашение, которое не заставит вас ломать голову в их поисках позднее.

Откройте файл с настройками проекта (settings.py) и добавьте параметр TEMPLATE_DIRS:

TEMPLATE_DIRS = (
    '/path/to/mysite/templates', # Change this to your own directory.
)

Теперь скопируйте шаблон admin/base_site.html из каталога с исходниками Django admin (django/contrib/admin/templates) в подкаталог admin, размещенный по указанному в TEMPLATE_DIRS пути. Например, если вы указали в TEMPLATE_DIRS ‘/path/to/mysite/templates’, то скопируйте django/contrib/admin/templates/admin/base_site.html в /path/to/mysite/templates/admin/base_site.html.

Если вы не можете найти исходники Django, выполните команду:

python -c "
import sys
sys.path = sys.path[1:]
import django
print(django.__path__)"

Теперь, замените в шаблоне текст на название вашего сайта или то, что вы сочтете нужным.

Любой из стандартных шаблонов Django может быть переписан. Чтобы заменить шаблон, скопируйте его также в каталог с шаблонами вашего проекта и делайте изменения.

Учтите, что загрузчик шаблонов Django ,будет использовать первый шаблон, найденный им в файловой системе. Поэтому если вы переопределяете шаблоны, используемые административной частью сайта в вашем приложении, убедитесь, что приложение идет в списке INSTALLED_APPS раньше, чем django.contrib.admin.

Изменение основной страницы админки

Похожим образов выполняется и изменение базовой страницы админской части сайта. Стандартная индексная страница админки Django отображает все приложения из INSTALLED_APPS, которые были зарегистрированы в админке, в алфавитном порядке.

Вполне вероятно, что вы захотите изменить это — ведь главная страница очень важна и должна быть удобной в использовании. Для этого вам понадобится изменить файл admin/index.html. Перенесите его из исходников Django в ваш проект и измените. Редактируя файл, вы увидите переменную, с названием app_list. Эта переменная содержит каждое установленное в Django приложение. Вместо использования этого списка вы можете закодировать на главной странице ссылки на любые объекты, которые сочтете нужными для удобной работы.

Когда стоит применять админку Django

Django admin не очень подходит для обычных посетителей сайта. Как правило, для авторизованных посетителей, не являющихся администраторами сайта, целесообразнее создавать свои шаблоны для работы с нужной им информацией.

Использование django admin при этом вы можете оставить для администратора сайта, которому нужен простой интерфейс и возможность отредактировать любой объект в базе данных.

Понравилась статья? Поделить с друзьями:
  • Как изменить надпись windows 7 максимальная на экране приветствия
  • Как изменить надпись starting windows при загрузке
  • Как изменить надпись joined the game
  • Как изменить надпись google
  • Как изменить надписи контакта