Dica 32 - Django Admin: Sobreescrevendo os templates do Admin


Sobreescrevendo a tela de login do Admin

Inserindo um logo no header do Admin

Last updated




Last updated
ls -l .venv/lib/python3.8/site-packages/django/contrib/admin/templates/admin/
cat .venv/lib/python3.8/site-packages/django/contrib/admin/templates/admin/change_list.htmlmyproject
├── core
│ ├── templates
│ │ ├── admin
│ │ │ ├── base_site.html
│ │ │ ├── login.html
│ │ │ ├── core
│ │ │ │ ├── article
│ │ │ │ │ └── change_list.html
│ │ │ │ └── change_list.htmlmkdir -p myproject/core/templates/admin/core/articletouch myproject/core/templates/admin/core/change_list.html{\% extends "admin/change_list.html" %}
{\% block object-tools-items %}
{{ block.super }}
<li>
<a href="botao-da-app/">
Novo botão
</a>
</li>
{\% endblock %}touch myproject/core/templates/admin/core/article/change_list.html{\% extends "admin/change_list.html" %}
{\% block object-tools-items %}
{{ block.super }}
<li>
<a href="botao-artigo/">
Botão do Artigo
</a>
</li>
{\% endblock %}# settings.py
TEMPLATES = [
{
...
'DIRS': [
BASE_DIR,
os.path.join(BASE_DIR, 'templates')
],
...
},
]from django.contrib import admin, messages
# admin.py
from django.shortcuts import redirect
from django.urls import path
@admin.register(Article)
class ArticleAdmin(admin.ModelAdmin):
...
def get_urls(self):
urls = super().get_urls()
my_urls = [
path(
'botao-artigo/',
self.admin_site.admin_view(self.minha_funcao, cacheable=True)
),
]
return my_urls + urls
def minha_funcao(self, request):
print('Ao clicar no botão, faz alguma coisa...')
messages.add_message(
request,
messages.INFO,
'Ação realizada com sucesso.'
)
return redirect('admin:core_article_changelist')
@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
...
def get_urls(self):
urls = super().get_urls()
my_urls = [
path(
'botao-da-app/',
self.admin_site.admin_view(self.minha_funcao_category, cacheable=True)
),
]
return my_urls + urls
def minha_funcao_category(self, request):
print('Ao clicar no botão, faz alguma coisa em category...')
messages.add_message(
request,
messages.INFO,
'Ação realizada com sucesso.'
)
return redirect('admin:core_category_changelist')# admin.py
admin.site.login_template = 'myproject/core/templates/admin/login.html'cat .venv/lib/python3.8/site-packages/django/contrib/admin/templates/admin/login.html
cat .venv/lib/python3.8/site-packages/django/contrib/admin/templates/admin/base_site.htmltouch myproject/core/templates/admin/login.html<!-- myproject/core/templates/admin/login.html -->
{\% extends "admin/login.html" %}
{\% load static %}
{\% block branding %}
<h1 id="site-name">
<a href="{\% url 'admin:index' %}">
<img src="{\% static 'img/django-logo-negative.png' %}" alt="django-logo-negative.png" width="100px">
</a>
</h1>
{\% endblock %}
{\% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{\% static "css/login.css" %}" />
{{ form.media }}
{\% endblock %}/* myproject/core/static/css/login.css */
body.login {
background: url("../img/headset.jpg") no-repeat center center;
background-size: 100% auto;
}
html {
min-height: 100%;
}touch myproject/core/templates/admin/base_site.html{\% extends "admin/base_site.html" %}
{\% load static %}
{\% block branding %}
<h1 id="site-name">
<a href="{\% url 'admin:index' %}">
<img src="{\% static 'img/django-logo-negative.png' %}" alt="django-logo-negative.png" width="70px">
</a>
</h1>
{\% endblock %}# settings.py
INSTALLED_APPS = [
'myproject.core',
'django.contrib.admin',
...
]