Django Admin-헤더 'Django Administration'텍스트 변경


201

django 관리 헤더의 'Django 관리'텍스트를 어떻게 변경합니까?

"관리자 사용자 정의"문서에서 다루지 않는 것 같습니다.


이것은 튜토리얼 에서 다룹니다 .
djvg

답변:


139

업데이트 : Django 1.7 이상을 사용하는 경우 아래 답변을 참조하십시오 .


2011의 원래 답변 : 이렇게하려면 고유 한 관리자 base_site.html템플릿을 만들어야합니다 . 가장 쉬운 방법은 파일을 만드는 것입니다.

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

다음은 맞춤 제목을 제외하고 원본base_site.html 의 사본이어야합니다 .

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

이것이 작동하려면 프로젝트에 대한 올바른 설정이 있어야합니다 settings.py.

  • /projectdir/templates/에 추가되어 있는지 확인하십시오 TEMPLATE_DIRS.
  • django.template.loaders.filesystem.Loader에 추가되어 있는지 확인하십시오 TEMPLATE_LOADERS.

에 대한 자세한 내용은 문서를 참조하십시오settings.py .


77
또한에서 할 수 {% extends "admin/base.html" %}있고 /<projectdir>/templates/admin/base_site.html필요한 블록을 다시 정의하기 만하면 {% block branding %}...{% endblock %}됩니다.
Arnaud

12
아주 오래된 경우에도 INSTALLED_APPS
DRC

1
django 1.6 python 3.3에서는 위의 TEMPLATE_LOADER설정을 추가하지 않아도 작동 합니다. 그냥 TEMPLATE_DIR이 충분히 보인다
lukik

12
이것은 1.7 기준으로 구식입니다. Reto Aebersold의 답변을 참조하십시오.
Andrew B.

5
url.py에서 시도하십시오. admin.site.site_header = '내 관리'admin.site.index_title = ( '내 관리자') admin.site.site_title = ( '내 관리자 페이지')
Ashish Gupta

352

Django 1.7부터 템플릿을 재정의 할 필요가 없습니다. 이제 구현할 수 site_header , site_titleindex_title사용자 정의의 특성 AdminSite을 쉽게 관리 사이트의 페이지 제목 및 머리글 텍스트를 변경하기 위해. AdminSite 서브 클래스를 작성하고 인스턴스를 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)),
)

업데이트 :만큼 당신이 간단하게 설정할 수 있습니다 oxfn 지적 site_header당신에 urls.py또는 admin.py서브 클래스하지 않고 직접 AdminSite:

admin.site.site_header = 'My administration'

11
/ myadmin /에 액세스하려고하면 "아무것도 편집 할 수있는 권한이 없습니다"오류 메시지가 나타납니다. .autodiscover를 호출 해야하는 것처럼 보이지만 Django 1.7은 자동으로 호출되어야합니다. 실마리?
David Arcos

3
@DavidArcos 새로 admin_site만든 모델을 등록해야합니다 . 처럼admin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev

1
django.auth.views의 헤더도 사용자 정의해야하는 경우 ( admin/base_site.html예 : 템플릿에 따라 달라집니다 ( 예 : password_reset) extra_contextURL 에도 사용해야합니다. 예url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer

이 방법에 대해 알아야 할 것은 표준 관리 페이지에서만 작동한다는 것입니다. 다른 응용 프로그램에서 자체 관리 페이지 (관리자 기본 템플릿 확장)를 추가하는 경우 항상 기본 "Django Administration"을 사용합니다. 표제.
Kedare

1
@oxfn 둘 이상의 앱이있는 경우 admin.site.site_header구성 app*/admin.py이 적용됩니까?
nalzok

196

관리 사이트 헤더를 설정하는 쉬운 방법이 있습니다-다음 urls.py과 같이 현재 관리 인스턴스에 할당하십시오

admin.site.site_header = 'My admin'

또는 별도의 방법으로 헤더 작성 마법을 구현할 수 있습니다

admin.site.site_header = get_admin_header()

따라서 간단한 경우에는 서브 클래스가 필요하지 않습니다. AdminSite


1
첫 번째 방법은 효과가있었습니다. 나는 현재 문제가 무엇인지 정말로 모른다. 감사합니다
Alex Jolig

4
헤더를 변경하는 경우 다음과 같이 사이트 제목을 변경하고 싶을 수도 있습니다 admin.site.site_title = 'My site admin'.
mcastle

1
다음에 추가 할 가져 오기 문자열이 있습니다 urls.py.from django.contrib import admin
serg

4
이걸 처음으로 찾았 으면 좋겠다 ... 문서를주의 깊게 AdminSite읽고 , 서브 클래스 를 만들고 작업을 시도 autodiscover()했지만 결국이 솔루션을 스스로 생각했습니다. 나는 실제로 내 재정이 admin.py나는 그것이 다른 관리 관련 로직을 모두와 함께 유지 년대 이후 청소기라고 생각
user193130


96

에서 urls.py당신에게 가장 중요한 3 개 가지 변수를 대체 할 수 있습니다 :

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"

참조 : 이 속성들에 대한 장고 문서 .


65

이 질문에 대한 답변을 바탕으로 Django 1.8.3의 간단한 완벽한 솔루션입니다.

settings.py추가 :

ADMIN_SITE_HEADER = "My shiny new administration"

urls.py추가 :

from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER

7
urls.py를 사용하는 것보다이 작업을 수행하기에 더 좋은 곳이 있습니까?
Venkat Kotra

2
@VenkatKotra 네 admin.py. 아직 가지고 있지 않다면 작성하고 추가하는 것을 잊지 마십시오 from django.contrib import admin.
user193130

3
설정을 가져 오는 권장 방법은 "django.conf 가져 오기 설정에서"( docs.djangoproject.com/en/1.9/topics/settings/… 참조 )를 통한 방법입니다.
yoniLavi

1
Django가 호출하는 설정은 없습니다. ADMIN_SITE_HEADER여기서 중요한 것은 다음 줄입니다.urls.py
Flimm

16

가장 쉬운 방법은

from django.contrib import admin

그런 다음 url.py기본 응용 프로그램 하단에 추가하십시오.

admin.site.site_title = "Your App Title"
admin.site.site_header = "Your App Admin" 

15

Django 2.1.1의 경우 다음 줄을 추가하십시오. 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'

10

템플릿 에서 볼 수 있듯이 텍스트는 현지화 프레임 워크를 통해 전달됩니다 ( trans템플릿 태그 사용에 유의 ). 템플릿을 직접 만들지 않고도 번역 파일을 변경하여 텍스트를 재정의 할 수 있습니다.

  1. mkdir locale

  2. ./manage.py makemessages

  3. locale/en/LC_MESSAGES/django.po다음 행을 추가하여 편집하십시오 .

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

https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files를 참조 하십시오


1
이것은 끔찍한 해결책입니다. 번역 문자열을 재정의하는 것은 끔찍한 생각입니다.

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')

1
from django.utils.translation import ugettext_lazy 이 줄을 추가하는 것을 잊지 마십시오.
rkdevs

5

우선, templates / admin / base_site.html을 프로젝트에 추가해야합니다. 이 파일은 Django 개발자가 관리 사이트를 약간 사용자 정의하기위한 정확한 목적으로 의도 한 파일이므로 안전하게 덮어 쓸 수 있습니다. 파일에 넣을 예제는 다음과 같습니다.

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

이것은 일반적인 관행입니다. 그러나이 후에도 여전히 기본 관리자 색인 페이지에 성가신 "사이트 관리"가 남아 있음을 알았습니다. 그리고이 문자열은 템플릿 안에 있지 않고 관리자보기 안에 설정되었습니다. 운 좋게도 변경하기가 쉽습니다. 언어가 영어로 설정되어 있다고 가정하면 프로젝트 디렉토리에서 다음 명령을 실행하십시오.

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

이제 locale / en / LC_MESSAGES / django.po 파일을 열고 헤더 정보 다음에 두 줄을 추가하십시오 (이 예제의 마지막 두 줄).

"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 <LL@li.org>\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"

그런 다음, 다음 명령을 실행하고 프로젝트 서버를 다시로드하십시오.

$ ./manage.py compilemessages

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


링크가 잘못 될 수 있으므로 외부 사이트에 대한 링크는 잘못된 것으로 간주됩니다. 여기 사이트에서 답변을 다시 작성하는 것이 좋습니다.

나는 당신이 사이트 외부로 가고 싶지 않다면 대답을 다시 썼습니다.
Soroosh

5

에서 장고 2.0 당신은 단지에 한 줄을 추가 할 수 url.py와 이름을 변경합니다.

# url.py

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

Django의 이전 버전의 경우 . (<1.11 이하) 편집해야합니다admin/base_site.html

이 줄을 변경

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

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

당신은 django버전을 확인할 수 있습니다

django-admin --version

5

admin.py 파일로 이동하여 파일에 다음 줄을 추가하십시오.

admin.site.site_header = "My Administration"


3

이 작업을 위해 템플릿을 변경할 필요는 없습니다 settings.py. 프로젝트의 업데이트 만하면 됩니다. 하단으로 가서 settings.py이것을 정의하십시오.

admin.site.site_header = 'My Site Admin'

이런 식으로 Django 관리자의 헤더를 변경할 수 있습니다. 또한 다음 링크에서 Django Admin 사용자 정의 및 설정에 대한 자세한 내용을 읽을 수 있습니다.

장고 관리자 설명서



3

이를 수행하는 두 가지 방법이 있습니다.

1] base_site.html에서 재정 의하여 django/contrib/admin/templates/admin/base_site.html다음을 수행하십시오 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 %}

위 코드 스 니펫에서 site_title & site_header를 편집하십시오. 이 방법은 작동하지만 정적 변경이므로 권장되지 않습니다.

2] urls.py프로젝트 디렉토리 에 다음 줄을 추가하여 :

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

이 방법은 사이트 헤더, 사이트 제목 및 색인 제목을 편집하지 않고 변경할 수 있으므로 권장됩니다 base_site.html.


2

내 앱에서는 관리자 인터페이스 만 사용하기 때문에 이것을 admin.py에 넣습니다.

admin.site.site_header = 'My administration'

1

admin/base_site.html템플릿을 재정의하고 ( 템플릿을 복사 django.contrib.admin.templates하여 자신의 관리자 템플릿 디렉토리에 삽입) branding블록을 교체하면 됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.