django: how do I actually override admin site template

12,552

Solution 1

First open your settings.py and add a template folder:

TEMPLATES = [
{
    'DIRS': [
        '/path/to/your/django-project/templates', # Absolute Path
        # os.path.join(BASE_DIR, 'templates') # Relative Path
    ],
    ... 

Then move the file base_site.html to the following directory. It's important to keep the structure on the file system.

/path/to/your/django-project/templates/admin/base_site.html

Content of base_site.html:

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

{% block title %}{{ title }} | {{ site_title|default:_('NEW TITLE') }}{% endblock %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">Your new Title</a></h1>
{% endblock %}

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

Django Documentation - Overriding Admin Site

Hope that helps.

Solution 2

Add your Django app above ‘Django.contrib.admin’ in settings.INSTALLED_APPS. The ordering matters.

use my_site/my_app/templates/admin/base_site.html

put your app where you define this template before 'django.contrib.admin', in INSTALLED_APPS

source link

Solution 3

So you should delete including the curly braces, and just write the text you want.

Remove: `{{ site_title|default:_('NEW TITLE') }}`  Write: NEW TITLE
Remove: `{{ site_header|default:_('NEW TITLE' }}`  Write: NEW TITLE

Also be sure that you placed the folders (templates/admin) in the root directory of your project. root directory is the container for all your app folders and also the manage.py file.

In other words, "templates" folder you want to create should be at the same level with manage.py file.

Your folder structure should look like this:

mysite/
    templates/
        admin/
            base_site.html
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    ...
    ...

Solution 4

I am not sure if I understand right. but you can easy to change the title by doing this:

in the "urls.py" file

from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    .......
]

admin.site.site_header = 'My New Title'
admin.site.site_title = 'My New Title'

Then it should get the job done for you.

Share:
12,552
Hansong Li
Author by

Hansong Li

Updated on June 12, 2022

Comments

  • Hansong Li
    Hansong Li almost 2 years

    I know this is asked and answered several times but I basically went over all the post on stack overflow and still couldn't get this to work. Right now I am just trying simply change the admin site title. I have the following:

    #base_site.html
    {% extends "admin/base_site.html" %}
    
    {% block title %}{{ title }} | {{ site_title|default:_('NEW TITLE') }}{% endblock %}
    
    {% block branding %}
    <h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('NEW TITLE') }}</a></h1>
    {% endblock %}
    
    {% block nav-global %}{% endblock %}
    

    And I tried to put this in

    my_site/templates/admin/base_site.html,

    my_site/templates/admin/my_app/base_site.html, and

    my_site/my_app/templates/admin/base_site.html,

    but none of these work.

    settings.py:
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')],
            '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',
                ],
                'loaders': [
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ],
            },
        },
    ]
    

    I also tried just directly changing django\contrib\admin\templates\admin\base_site.html but still nothing happens.

    I am really frustrated now and definitely could use some help, thanks

    Updates: Actually I found out that the local template does have effect. enter image description here

    Like here, the topmost white bar displays "#base_site.html!!@#" which is what I put in my_site/templates/admin/base_site.html as a comment by chance. So it kinda working, but I still don't understand why I can't change the site title.