Django管理者-ヘッダー「Django管理」テキストを変更


回答:


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 %}
アルノー、

12
でも、かなり古い場合、私はあなたが「django.contrib.admin」の前に、このテンプレートを定義し、あなたが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 = 'My Administration' admin.site.index_title =( 'My Admin')admin.site.site_title =( 'My Admin page')
Ashish Gupta

352

Django 1.7以降では、テンプレートを上書きする必要はありません。これで実装できます site_headersite_title、およびindex_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 14

3
@DavidArcos admin_site作成したnew でモデルを登録する必要があります。いいねadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev 2014

1
django.auth.viewsのヘッダーもカスタマイズする必要がある場合(admin/base_site.htmlたとえば、password_resetなどのテンプレートに依存)extra_context、URLでも使用する必要があります。例:url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer

この方法について知っておくべきことは、標準の管理ページでのみ機能することです。別のアプリケーションで独自の管理ページを追加している場合(管理ベーステンプレートを拡張)、それらは常にデフォルトの「Django管理」になります。題名。
Kedare 2017年

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
最初の方法はうまくいきました。今のところ何が問題だったのか本当にわかりません。ありがとう
アレックスジョリグ2015

4
ヘッダーを変更する場合は、サイトのタイトルも変更することをお勧めしますadmin.site.site_title = 'My site admin'。これは次のように実行できます。
mcastle

1
ここに追加するインポート文字列があるurls.pyfrom 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"

参照:これらの属性に関するDjangoドキュメント


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 2016年

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 2018年

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を開き、ヘッダー情報の後に2行を追加します(この例の最後の2行)

"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 2013

5

Djangoの2.0あなただけの内の1行を追加することができます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


3

この作業のためにテンプレートを変更する必要はなくsettings.py、プロジェクトのを更新するだけです。の下部に移動して、settings.pyこれを定義します。

admin.site.site_header = 'My Site Admin'

このようにして、Django管理者のヘッダーを変更できます。さらに、Django Adminのカスタマイズと設定の詳細については、次のリンクを参照してください。

Django管理ドキュメント



3

これを行うには2つの方法があります。

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.