Quản trị Django - thay đổi tiêu đề văn bản 'Quản trị Django'


201

Làm thế nào để một người thay đổi văn bản 'quản trị Django' trong tiêu đề quản trị django?

Nó dường như không được đề cập trong tài liệu "Tùy chỉnh quản trị viên".


Điều này được đề cập trong hướng dẫn .
djvg

Câu trả lời:


139

Cập nhật : Nếu bạn đang sử dụng Django 1.7+, hãy xem câu trả lời bên dưới .


Câu trả lời gốc từ năm 2011: Bạn cần tạo base_site.htmlmẫu quản trị viên của riêng mình để thực hiện việc này. Cách dễ nhất là tạo tệp:

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

Đây phải là một bản sao của bản gốcbase_site.html , ngoại trừ việc đặt tiêu đề tùy chỉnh của bạn:

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

Để làm việc này, bạn cần có các cài đặt chính xác cho dự án của mình, cụ thể là settings.py:

  • Hãy chắc chắn rằng /projectdir/templates/được thêm vào TEMPLATE_DIRS.
  • Hãy chắc chắn rằng django.template.loaders.filesystem.Loaderđược thêm vào TEMPLATE_LOADERS.

Xem tài liệu để biết thêm thông tin vềsettings.py .


77
Cũng lưu ý rằng bạn có thể {% extends "admin/base.html" %}vào /<projectdir>/templates/admin/base_site.html, và chỉ cần xác định lại (các) khối bạn cần, nghĩa là {% block branding %}...{% endblock %}.
Arnaud

12
ngay cả khi khá cũ, tôi muốn thêm rằng bạn phải đặt ứng dụng của mình vào nơi bạn xác định mẫu này trước 'django.contrib.admin', trong INSTALLED_APPS
DRC

1
Trong django 1.6 python 3.3, phần trên hoạt động ngay cả khi bạn không thêm TEMPLATE_LOADERcài đặt. Chỉ cần TEMPLATE_DIRđược đủ có vẻ như
lukik

12
Điều này đã lỗi thời kể từ 1.7. Xem câu trả lời của Reto Aebersold.
Andrew B.

5
Hãy thử điều này trong url.py admin.site.site_header = 'Quản trị viên của tôi' admin.site.index_title = ('Quản trị viên của tôi') admin.site.site_title = ('Trang quản trị của tôi')
Ashish Gupta

352

Kể từ Django 1.7, bạn không cần ghi đè lên các mẫu. Bây giờ bạn có thể thực hiện site_header , site_titleindex_titlecác thuộc tính trên một tùy chỉnh AdminSite để dễ dàng thay đổi tiêu đề trang trang web của admin và văn bản tiêu đề. Tạo một lớp con AdminSite và nối ví dụ của bạn vào URLconf của bạn:

quản trị viên:

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

url:

from django.conf.urls import patterns, include
from myproject.admin import admin_site

urlpatterns = patterns('',
    (r'^myadmin/', include(admin_site.urls)),
)

Cập nhật : Như được chỉ ra bởi oxfn, bạn có thể chỉ cần đặt site_headertrong urls.pyhoặc admin.pytrực tiếp mà không cần phân lớp AdminSite:

admin.site.site_header = 'My administration'

11
Thao tác này sẽ ném thông báo lỗi "Bạn không có quyền chỉnh sửa bất cứ điều gì" khi tôi cố gắng truy cập / myadmin /. Có vẻ như tôi nên gọi .autodiscover, nhưng Django 1.7 nó được gọi là tự động. Có manh mối nào không?
David Arcos

3
@DavidArcos Bạn cần đăng ký mô hình của mình mới admin_sitemà bạn đã tạo. Giống nhưadmin_site.register(MyModel, ModelAdmin)
Andrey Fedoseev

1
Nếu cũng là một tiêu đề trong django.auth.view nên được tùy chỉnh (tùy thuộc vào admin/base_site.htmlmẫu, ví dụ: password_reset) thì cũng extra_contextnên được sử dụng trong url: vdurl(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}})
hynekcer 18/2/2017

Một điều cần biết về cách này là nó sẽ chỉ hoạt động với các trang quản trị tiêu chuẩn, nếu về phía bạn trên một ứng dụng khác, bạn đang thêm các trang quản trị của riêng mình (mở rộng mẫu cơ sở quản trị viên), họ sẽ luôn lấy "Quản trị Django" mặc định tiêu đề.
Kedare

1
@oxfn Nếu tôi có nhiều ứng dụng, admin.site.site_headercấu hình trong đó app*/admin.pysẽ có hiệu lực?
nalzok

196

Có một cách dễ dàng để đặt tiêu đề trang quản trị - gán nó cho phiên bản quản trị viên hiện tại urls.pynhư thế này

admin.site.site_header = 'My admin'

Hoặc người ta có thể thực hiện một số phép thuật xây dựng tiêu đề theo phương pháp riêng biệt

admin.site.site_header = get_admin_header()

Vì vậy, trong các trường hợp đơn giản, không cần phải phân lớp AdminSite


1
Cách đầu tiên làm việc. Tôi không thực sự biết vấn đề là gì vào lúc này. cảm ơn bạn
Alex Jolig 11/2/2015

4
Nếu bạn đang thay đổi tiêu đề, có lẽ bạn cũng muốn thay đổi tiêu đề trang web, có thể được thực hiện bằng : admin.site.site_title = 'My site admin'.
lâu đài 18/07/2015

1
Đây là một chuỗi nhập để thêm vào urls.py:from django.contrib import admin
serg

4
Ước gì tôi tìm thấy cái này đầu tiên ... Theo các tài liệu, tôi đã phân lớp AdminSitevà dành một chút thời gian để cố gắng làm cho nó hoạt động autodiscover()nhưng cuối cùng tôi đã tự mình nghĩ ra giải pháp này. Tôi thực sự có phần ghi đè của mình admin.py, cái mà tôi nghĩ là sạch hơn vì nó được giữ cùng với tất cả các logic liên quan đến quản trị viên khác
user193130

1
kiểm tra danh sách tất cả các thuộc tính bạn có thể thay đổi tại docs.djangoproject.com/en/1.11/ref/contrib/admin/ gợi
Sergio Morstabilini

96

Trong urls.pybạn có thể ghi đè 3 biến quan trọng nhất:

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"

Tham khảo: Tài liệu Django về các thuộc tính này .


65

Một giải pháp hoàn chỉnh đơn giản trong Django 1.8.3 dựa trên các câu trả lời trong câu hỏi này.

Trong settings.pyadd:

ADMIN_SITE_HEADER = "My shiny new administration"

Trong urls.pyadd:

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

7
Có nơi nào tốt hơn để làm điều này hơn là sử dụng urls.py không?
Venkat Kotra

2
@VenkatKotra Vâng, trong admin.py. Nếu bạn chưa có nó, chỉ cần tạo nó và đừng quên thêm from django.contrib import admin.
dùng193130

3
Cách nhập cài đặt được đề xuất là thông qua - "từ cài đặt nhập django.conf" (xem docs.djangoproject.com/en/1.9/topics/sinstall/, )
yoniLavi

1
Không có thiết lập nào mà Django nhìn vào được gọi ADMIN_SITE_HEADER, điều duy nhất quan trọng ở đây là dòng trongurls.py
Flimm

16

Cách dễ nhất để làm điều đó chắc chắn rằng bạn có

from django.contrib import admin

và sau đó chỉ cần thêm những thứ này vào cuối url.pyứng dụng chính của bạn

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

15

Đối với Django 2.1.1, thêm các dòng sau vào 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

Như bạn có thể thấy trong các mẫu , văn bản được phân phối qua khung bản địa hóa (lưu ý việc sử dụng transthẻ mẫu). Bạn có thể thay đổi các tệp dịch để ghi đè văn bản mà không cần tạo bản sao mẫu của riêng bạn.

  1. mkdir locale

  2. ./manage.py makemessages

  3. Chỉnh sửa locale/en/LC_MESSAGES/django.po, thêm các dòng này:

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

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


1
Đây là một giải pháp khủng khiếp. Ghi đè chuỗi dịch chỉ là một ý tưởng khủng khiếp.

5

quản trị viên:

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 Đừng quên thêm dòng này.
rkdevs

5

Trước hết, bạn nên thêm mẫu / admin / base_site.html vào dự án của bạn. Tệp này có thể được ghi đè một cách an toàn vì đó là tệp mà các nhà phát triển Django dành cho mục đích chính xác là tùy chỉnh trang web quản trị của bạn một chút. Dưới đây là một ví dụ về những gì cần đặt trong tệp:

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

Đây là thực tế phổ biến. Nhưng tôi nhận thấy sau đó tôi vẫn bị bỏ lại với một Quản trị trang web khó chịu, trên trang chỉ mục quản trị chính. Và chuỗi này không nằm trong bất kỳ mẫu nào, mà được đặt bên trong chế độ xem của quản trị viên. May mắn thay, nó khá dễ dàng để thay đổi. Giả sử ngôn ngữ của bạn được đặt thành tiếng Anh, hãy chạy các lệnh sau từ thư mục dự án của bạn:

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

Bây giờ hãy mở tệp locale / en / LC_MESSAGES / django.po và thêm hai dòng sau thông tin tiêu đề (hai dòng cuối cùng của ví dụ này)

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

Sau này, hãy nhớ chạy lệnh sau và tải lại máy chủ của dự án của bạn:

$ ./manage.py compilemessages

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


Liên kết đến các trang web bên ngoài được coi là xấu, vì liên kết có thể xấu đi. Bạn được khuyến khích viết lại câu trả lời từ trang web ở đây.

Tôi viết lại câu trả lời trong trường hợp bạn không muốn ra ngoài trang web.
Soroosh

5

Từ Django 2.0, bạn có thể chỉ cần thêm một dòng trong url.pyvà thay đổi tên.

# url.py

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

Đối với các phiên bản cũ của Django. (<1.11 trở về trước) bạn cần chỉnh sửaadmin/base_site.html

Thay đổi dòng này

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

đến

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

Bạn có thể kiểm tra djangophiên bản của mình bằng cách

django-admin --version

5

Chỉ cần truy cập tệp admin.py và thêm dòng này vào tệp:

admin.site.site_header = "My Administration"


3

bạn không cần thay đổi bất kỳ mẫu nào cho công việc này, bạn chỉ cần cập nhật settings.pydự án của mình. Đi đến dưới cùng settings.pyvà xác định điều này.

admin.site.site_header = 'My Site Admin'

Bằng cách này, bạn sẽ có thể thay đổi tiêu đề của quản trị viên Django. Ngoài ra, bạn có thể đọc thêm về tùy chỉnh và cài đặt của Django Admin trên liên kết sau.

Tài liệu quản trị Django



3

Có hai phương pháp để làm điều này:

1] By trọng base_site.htmltrongdjango/contrib/admin/templates/admin/base_site.html : Sau đây là nội dung của 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 %}

Chỉnh sửa site_title & site_header trong đoạn mã trên. Phương pháp này hoạt động nhưng không được khuyến khích vì nó thay đổi tĩnh.

2] Bằng cách thêm các dòng sau trong thư mục urls.pycủa dự án:

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

Phương pháp này được khuyến nghị vì chúng ta có thể thay đổi tiêu đề trang web, tiêu đề trang web & tiêu đề chỉ mục mà không cần chỉnh sửa base_site.html.


2

Vì tôi chỉ sử dụng giao diện quản trị viên trong ứng dụng của mình, nên tôi đặt giao diện này trong admin.py:

admin.site.site_header = 'My administration'

1

Bạn chỉ cần ghi đè admin/base_site.htmlmẫu (sao chép mẫu từ django.contrib.admin.templatesvà đặt vào thư mục mẫu quản trị của riêng bạn) và thay thế brandingkhối.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.