Câu hỏi Django Admin - thay đổi tiêu đề 'văn bản quản trị Django'


Làm thế nào để 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".


151
2018-02-08 21:10


gốc




Các câu trả lời:


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

Câu trả lời gốc từ năm 2011: Bạn cần phải tạo mẫu admin_site.html 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 https://github.com/django/django/blob/master/django/contrib/admin/templates/admin/base_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 phải có các thiết lập chính xác cho dự án của bạn, cụ thể là trong settings.py:

  • Đảm bảo '/ projectdir / templates /' được thêm vào TEMPLATE_DIRS
  • Đảm bảo 'django.template.loaders.filesystem.Loader' được thêm vào TEMPLATE_LOADERS

Xem http://docs.djangoproject.com/en/dev/ref/settings/ để biết thêm thông tin về settings.py


124
2018-02-08 21:27



Cũng lưu ý rằng bạn có thể {% extends "admin/base.html" %} trong /<projectdir>/templates/admin/base_site.htmlvà chỉ cần xác định lại (các) khối bạn cần, tức là {% block branding %}...{% endblock %}. - Arnaud
ngay cả khi khá cũ, tôi muốn thêm rằng bạn phải đặt ứng dụng của bạn nơi bạn xác định mẫu này trước 'django.contrib.admin', trong INSTALLED_APPS - DRC
Trong django 1,6 python 3.3, các công trình trên thậm chí khi bạn không thêm TEMPLATE_LOADER cài đặt. Chỉ TEMPLATE_DIR là đủ rồi - lukik
Đây là lỗi thời 1.7. Xem câu trả lời của Reto Aebersold. - Andrew Badr
Hãy thử điều này trong url.py admin.site.site_header = 'Quản trị 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


Như của Django 1,7 bạn không cần phải ghi đè lên các mẫu. Bây giờ bạn có thể triển khai site_header, site_titleindex_title thuộc tính trên một tùy chỉnh AdminSite để dễ dàng thay đổi tiêu đề trang và tiêu đề của trang quản trị. Tạo một lớp con AdminSite và móc cá thể của bạn vào trong tệp URLconf của bạn:

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

Cập nhật: Như đã chỉ ra bởi oxfn bạn có thể chỉ cần thiết lập site_header trong của bạn urls.py hoặc là admin.py trực tiếp không có phân lớp AdminSite:

admin.site.site_header = 'My administration'

282
2017-07-27 16:53



Điều này ném một 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 vào / myadmin /. Có vẻ như tôi nên gọi .autodiscover, nhưng Django 1.7 nó được cho là được gọi tự động. Bất kỳ đầu mối? - David Arcos
@DavidArcos Bạn cần phải đăng ký mô hình của mình tại admin_site mà bạn đã tạo. Như admin_site.register(MyModel, ModelAdmin) - Andrey Fedoseev
Nếu cũng có tiêu đề trong django.auth.views phải được tùy chỉnh (tùy thuộc vào admin/base_site.html mẫu, ví dụ: password_reset) sau đó cũng extra_context nên được sử dụng trong url: ví dụ: url(r'^password_reset/$', auth_views.password_reset, name='admin_password_reset', kwargs={'extra_context': {'site_header': "My administration"}}) - hynekcer
Một cái gì đó để biết về cách này là nó sẽ chỉ làm việc với các trang quản trị chuẩn, nếu trên mặt củ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 bạn (extendind mẫu admin), họ sẽ luôn luôn mặc định "Django Administration" chức vụ. - Kedare
@oxfn Nếu tôi có nhiều ứng dụng, admin.site.site_header cấu hình trong đó app*/admin.py sẽ có hiệu lực? - nalzok


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

admin.site.site_header = 'My admin'

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

admin.site.site_header = get_admin_header()

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


153
2017-09-24 08:11



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
Nếu bạn đang thay đổi tiêu đề, có thể bạn cũng sẽ muốn thay đổi tiêu đề trang web, có thể được thực hiện bằng: admin.site.site_title = 'My site admin'. - mcastle
Đây là chuỗi nhập để thêm vào urls.py: from django.contrib import admin - serg
Ước gì tôi tìm thấy điều này đầu tiên ... Heeding các tài liệu, tôi subclassed AdminSite và dành thời gian cố gắng làm cho nó hoạt động autodiscover() nhưng cuối cùng nghĩ về giải pháp này một mình. Tôi thực sự có ghi đè của tôi trong admin.py, mà tôi nghĩ là sạch hơn vì nó được lưu giữ cùng với tất cả các logic liên quan đến quản trị viên khác - user193130
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/… - Sergio Morstabilini


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

Trong settings.py thêm vào:

ADMIN_SITE_HEADER = "My shiny new administration"

Trong urls.py thêm vào:

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

55
2017-07-30 08:25



Có một nơi tốt hơn để làm điều này hơn bằng cách sử dụng urls.py? - Venkat Kotra
@VenkatKotra Có, 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. - user193130
Cách được khuyến nghị để nhập cài đặt là thông qua - "từ cài đặt nhập django.conf" (xem docs.djangoproject.com/en/1.9/topics/settings/…) - yoniLavi
Không có thiết lập mà Django nhìn vào được gọi là ADMIN_SITE_HEADER, điều duy nhất quan trọng ở đây là dòng urls.py - Flimm


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

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"

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


40
2018-03-27 19:39





Như bạn có thể thấy trong mẫu, văn bản được gửi qua khung bản địa hóa (lưu ý việc sử dụng trans thẻ 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 những 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


9
2018-02-14 22:29



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


Cách dễ nhất để thực hiện đảm bảo bạn có

from django.contrib import admin

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

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

8
2018-03-29 21:08





Trước hết, bạn muốn thêm mẫu / admin / base_site.html vào dự án của mình. 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 của việc tùy chỉnh trang web quản trị của bạn một chút. Dưới đây là ví dụ về những gì cần đưa vào 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 này rằng tôi vẫn còn lại với một "Site Administration" gây phiền nhiễ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, nhưng được đặt bên trong khung nhìn quản trị viên. May mắn thay nó khá dễ 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 tin 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 đó, hãy nhớ chạy 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/


3
2017-07-14 21:50



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. Bạn được khuyến khích viết lại câu trả lời từ trang web tại đâ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


bạn không cần thay đổi bất kỳ mẫu nào cho tác phẩm này, bạn chỉ cần cập nhật settings.py của dự án của bạn. Đi đến cuối của settings.py và 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 người quản trị Django. Hơn nữa, bạn có thể đọc thêm về tùy chỉnh và cài đặt Admin của Django trên liên kết sau.

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


2
2018-04-12 13:37