Django Admin - altera o texto do cabeçalho 'Django Administration'

201

Como alguém muda o texto 'Administração do Django' no cabeçalho do django admin?

Parece não estar coberto na documentação "Personalizando o administrador".

samurailawngnome
fonte
Isso é abordado no tutorial .
djvg

Respostas:

139

Atualização : Se você estiver usando o Django 1.7+, veja a resposta abaixo .


Resposta original de 2011: você precisa criar seu próprio base_site.htmlmodelo de administrador para fazer isso. A maneira mais fácil é criar o arquivo:

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

Esta deve ser uma cópia do originalbase_site.html , exceto colocando seu título personalizado:

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

Para que isso funcione, você precisa ter as configurações corretas para o seu projeto, nomeadamente em settings.py:

  • Verifique se /projectdir/templates/foi adicionado ao TEMPLATE_DIRS.
  • Verifique se django.template.loaders.filesystem.Loaderfoi adicionado ao TEMPLATE_LOADERS.

Consulte os documentos para obter mais informações sobresettings.py .

user608133
fonte
77
Observe também que você pode {% extends "admin/base.html" %}em /<projectdir>/templates/admin/base_site.htmle simplesmente redefinir o bloco (s) que você precisa, ou seja {% block branding %}...{% endblock %}.
Arnaud
12
mesmo se bastante antiga, gostaria de acrescentar que você deve colocar seu aplicativo onde você define esse modelo antes 'django.contrib.admin', em INSTALLED_APPS
RDC
1
No django 1.6 python 3.3, o acima funciona mesmo quando você não adiciona a TEMPLATE_LOADERconfiguração. Assim TEMPLATE_DIRé o suficiente, parece
lukik
12
Isso está desatualizado a partir de 1.7. Veja a resposta de Reto Aebersold.
Andrew B.
5
Tente isso em url.py admin.site.site_header = 'Minha administração' admin.site.index_title = ('meu administrador') admin.site.site_title = ('minha página de administrador')
Ashish Gupta
352

No Django 1.7, você não precisa substituir os modelos. Agora você pode implementar site_header , site_titlee index_titleatributos em um AdminSite personalizado para alterar facilmente o título da página do site de administração e o texto do cabeçalho. Crie uma subclasse AdminSite e conecte sua instância ao seu 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)),
)

Atualização : Como indicado pelo oxfn, você pode simplesmente definir o site_headerno seu urls.pyou admin.pydiretamente, sem subclassificar AdminSite:

admin.site.site_header = 'My administration'
Reto Aebersold
fonte
11
Isso gera uma mensagem de erro "Você não tem permissão para editar nada" quando tento acessar o / myadmin /. Parece que eu deveria chamar .autodiscover, mas o Django 1.7 deve ser chamado automaticamente. Qualquer pista?
David Arcos
3
@DavidArcos Você precisa registrar seus modelos nas novas admin_siteque você criou. Comoadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev
1
Se também um cabeçalho no django.auth.views deve ser personalizado (isso depende do admin/base_site.htmlmodelo, por exemplo, password_reset), também extra_contextdeve ser usado nos URLs: egurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer,
Algo a saber sobre esse caminho é que ele só funcionará com as páginas de administração padrão; se do seu lado em outro aplicativo você estiver adicionando suas próprias páginas de administrador (estendendo o modelo da base de administração), elas sempre usarão a "Administração do Django" padrão. título.
Kedare
1
@oxfn Se eu tiver mais de um aplicativo, a admin.site.site_headerconfiguração em que app*/admin.pyentrará em vigor?
Nalzok 13/05
196

Existe uma maneira fácil de definir o cabeçalho do site de administração - atribua-o à instância atual do administrador urls.pydesta maneira

admin.site.site_header = 'My admin'

Ou pode-se implementar alguma mágica de construção de cabeçalho em método separado

admin.site.site_header = get_admin_header()

Assim, em casos simples, não há necessidade de subclassificar AdminSite

oxfn
fonte
1
A primeira maneira funcionou. Realmente não sei qual era o problema no momento. obrigada
Alex Jolig
4
Se você está mudando o cabeçalho, você provavelmente também quer mudar o título do site, que pode ser realizado com: admin.site.site_title = 'My site admin'.
Mc #
1
Aqui está uma sequência de importação para adicionar a urls.py:from django.contrib import admin
serg 4/16
4
Gostaria de encontrar isso primeiro ... Atendendo aos documentos, subclassifiquei AdminSitee passei um tempo tentando fazê-lo funcionar, autodiscover()mas finalmente pensei nessa solução por conta própria. Na verdade, tenho a minha substituição na admin.py, que eu acho que é mais limpo, uma vez que é mantido junto com todos os outros admin-relacionado lógica
user193130
1
verifique a lista de todos os atributos que você pode alterar em docs.djangoproject.com/en/1.11/ref/contrib/admin/…
Sergio Morstabilini 29/17
96

Em urls.pyvocê pode substituir as 3 variáveis ​​mais importantes:

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"

Referência: documentação do Django sobre esses atributos .

Gregory
fonte
65

Uma solução completa e simples no Django 1.8.3 com base nas respostas nesta pergunta.

Em settings.pyadição:

ADMIN_SITE_HEADER = "My shiny new administration"

Em urls.pyadição:

from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
kuzavas
fonte
7
Existe um lugar melhor para fazer isso do que usar urls.py?
Venkat Kotra 13/03/16
2
@VenkatKotra Sim, em admin.py. Se você ainda não o possui, basta criá-lo e não se esqueça de adicionar from django.contrib import admin.
precisa saber é o seguinte
3
A maneira recomendada para configurações de importação é via - "de django.conf configurações de importação" (ver docs.djangoproject.com/en/1.9/topics/settings/... )
yoniLavi
1
Não existe um cenário que o Django ADMIN_SITE_HEADERurls.py
veja
16

A maneira mais fácil de fazer isso é garantir que você tenha

from django.contrib import admin

e então basta adicioná-los na parte inferior do url.pyaplicativo principal

admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin" 
Muhammad Abrar Anwar
fonte
15

Para o Django 2.1.1, adicione as seguintes linhas em 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'
Ganesh
fonte
10

Como você pode ver nos modelos , o texto é entregue através da estrutura de localização (observe o uso da transmarca do modelo). Você pode fazer alterações nos arquivos de tradução para substituir o texto sem fazer sua própria cópia dos modelos.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Edite locale/en/LC_MESSAGES/django.po, adicionando estas linhas:

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

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

Wedgwood
fonte
1
Esta é uma solução terrível. Substituir cadeias de tradução é apenas uma péssima idéia.
5

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')
Fakher Meddeb
fonte
1
from django.utils.translation import ugettext_lazy Não esqueça de adicionar esta linha.
Rkdevs
5

Primeiro de tudo, você deve adicionar templates / admin / base_site.html ao seu projeto. Este arquivo pode ser sobrescrito com segurança, pois é um arquivo que os desenvolvedores do Django pretendem com o objetivo exato de personalizar um pouco o site de administração. Aqui está um exemplo do que colocar no arquivo:

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

Esta é uma prática comum. Mas notei depois disso que ainda me restava uma “Administração de Site” irritante na página principal do índice de administração. E essa string não estava dentro de nenhum dos modelos, mas sim dentro da visualização do administrador. Felizmente, é muito fácil mudar. Supondo que seu idioma esteja definido como inglês, execute os seguintes comandos no diretório do projeto:

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

Agora abra o arquivo locale / pt / LC_MESSAGES / django.po e adicione duas linhas após as informações do cabeçalho (as últimas duas linhas deste exemplo)

"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-04-03 03:25+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "Site administration"
msgstr "Main administration index"

Depois disso, lembre-se de executar o seguinte comando e recarregar o servidor do seu projeto:

$ ./manage.py compilemessages

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

Soroosh
fonte
O link para sites externos é considerado ruim, pois o link pode ficar ruim. Você deve reescrever a resposta do site aqui.
Reescrevi a resposta para o caso de você não querer sair do site.
Soroosh 28/09/2013
5

No Django 2.0, você pode simplesmente adicionar uma única linha no url.pye alterar o nome.

# url.py

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

Para versões mais antigas do Django. (<1.11 e versões anteriores), você precisa editaradmin/base_site.html

Mude esta linha

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

para

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

Você pode verificar sua djangoversão

django-admin --version
Tessaracter
fonte
5

Basta ir ao arquivo admin.py e adicionar esta linha no arquivo:

admin.site.site_header = "My Administration"

Prateek Gupta
fonte
3

você não precisa alterar nenhum modelo para este trabalho, basta atualizar o settings.pydo seu projeto. Vá para o final do settings.pye defina isso.

admin.site.site_header = 'My Site Admin'

Dessa forma, você poderá alterar o cabeçalho do administrador do Django. Além disso, você pode ler mais sobre a personalização e as configurações do Django Admin no seguinte link.

Documentação do Django Admin

Chitrank Dixit
fonte
3

Você pode usar AdminSite.site_headerpara alterar esse texto. Aqui estão os documentos

YasinYA
fonte
3

Existem dois métodos para fazer isso:

1] Por substituindo base_site.htmlem django/contrib/admin/templates/admin/base_site.html: Segue-se o conteúdo de 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 %}

Edite o site_title & site_header no snippet de código acima. Este método funciona, mas não é recomendável, pois é uma alteração estática.

2] Adicionando as seguintes linhas no urls.pydiretório do projeto:

admin.site.site_header = "AppHeader"
admin.site.site_title = "AppTitle"
admin.site.index_title = "IndexTitle"

Este método é recomendado, pois podemos alterar o cabeçalho do site, o título do site e o título do índice sem edição base_site.html.

Pranav Bhendawade
fonte
2

Como eu só uso a interface de administração no meu aplicativo, coloquei isso no admin.py:

admin.site.site_header = 'My administration'
numahell
fonte
1

Você acabou de substituir o admin/base_site.htmlmodelo (copie o modelo django.contrib.admin.templatese coloque em seu próprio diretório de modelo de administração) e substitua o brandingbloco.

Tomita, Yuji Tomita
fonte