33π
You can override templates/admin/index.html
and add the JavaScript in the block extrahead
:
{% extends "admin/index.html" %}
{% block extrahead %}
{{ block.super }}
# add a <script> tag here with your JavaScript
{% endblock %}
3π
You can load custom js
files only on Home
admin page. *My answer explains how to load CSS and JavaScript files in Django.
For example, set BASE_DIR / 'templates'
to DIRS in TEMPLATES and set BASE_DIR / 'static/'
to STATICFILES_DIRS in settings.py
as shown below so that Django can recognize templates
and static
folders just under django-project
. *My answer explains how to set Django Templates and I recommand to set whitenoise following my answer to disable your browser to cache the static files of Django: in settings.py
as shown below:
# "core/settings.py"
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR / 'templates' # Here
],
...
},
]
...
STATIC_URL = 'static/'
STATICFILES_DIRS = [
BASE_DIR / 'static/' # Here
]
Then, create custom.js
in static/admin/js/
and copy index.html from django/contrib/admin/static/admin/index.html
in your virtual environment to templates/admin/
as shown below:
django-project
|-core
| β-settings.py
|-app1
|-app2
|-static
| β-admin
| β-js
| β-custom.js # Here
β-templates
β-admin
β-index.html # Here
Then, set alert("Hello World");
to custom.js
as shown below:
# "static/admin/js/custom.js"
alert("Hello World");
Then, set custom.js
after {% block sidebar %}
in index.html
as shown below:
# "templates/admin/index.html"
# ...
{% block sidebar %}
{# β β β β β β β β β β β β β β Here β β β β β β β β β β β β β β #}
<script src="{% static 'admin/js/custom.js' %}" defer></script>
{# β β β β β β β β β β β β β β Here β β β β β β β β β β β β β β #}
<div id="content-related">
# ...
Now, Hello World
is shown only on Home
admin page as shown below:
In addition, you can load custom.js
on all admin pages.
So, copy base.html from django/contrib/admin/static/admin/base.html
in your virtual environment to templates/admin/
as shown below:
django-project
|-core
| β-settings.py
|-app1
|-app2
|-static
| β-admin
| β-js
| β-custom.js
β-templates
β-admin
β-base.html # Here
Then, set custom.js
after <link ... "admin/css/base.css" %}{% endblock %}">
in base.html
as shown below, then Hello World
is shown on all admin pages:
# "templates/admin/base.html"
# ...
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}">
{# β β β β β β β β β β β β β β Here β β β β β β β β β β β β β β #}
<script src="{% static 'admin/js/custom.js' %}" defer></script>
{# β β β β β β β β β β β β β β Here β β β β β β β β β β β β β β #}
{% block dark-mode-vars %}
<link rel="stylesheet" href="{% static "admin/css/dark_mode.css" %}">
# ...
Be careful, django/contrib/admin/static/admin/js/ has the js
files for Django Admin so you should not use the same file names in it to add custom js
files to Django Admin as long as you need to overwrite them.
And, running the code below can gether all static files in Django Project into static
folder without deleting custom and overwritten js
files.
python manage.py collectstatic
- [Django]-How do I keep my Django server running even after I close my ssh session?
- [Django]-Simple Subquery with OuterRef
- [Django]-Annotate a queryset with the average date difference? (django)