django: how do I actually override admin site template
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
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.
Hansong Li
Updated on June 12, 2022Comments
-
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.
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.