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".
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".
Câu trả lời:
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.html
mẫ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
:
/projectdir/templates/
được thêm vào TEMPLATE_DIRS
.django.template.loaders.filesystem.Loader
được thêm vào TEMPLATE_LOADERS
.{% 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 %}
.
TEMPLATE_LOADER
cài đặt. Chỉ cần TEMPLATE_DIR
được đủ có vẻ như
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_title
và index_title
cá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_header
trong urls.py
hoặc admin.py
trực tiếp mà không cần phân lớp AdminSite
:
admin.site.site_header = 'My administration'
admin_site
mà bạn đã tạo. Giống nhưadmin_site.register(MyModel, ModelAdmin)
admin/base_site.html
mẫu, ví dụ: password_reset) thì cũng extra_context
nê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"}})
admin.site.site_header
cấu hình trong đó app*/admin.py
sẽ có hiệu lực?
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.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ố 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
admin.site.site_title = 'My site admin'
.
urls.py
:from django.contrib import admin
AdminSite
và 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
Trong urls.py
bạ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 .
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.py
add:
ADMIN_SITE_HEADER = "My shiny new administration"
Trong urls.py
add:
from django.conf import settings
admin.site.site_header = settings.ADMIN_SITE_HEADER
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
.
ADMIN_SITE_HEADER
, điều duy nhất quan trọng ở đây là dòng trongurls.py
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"
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 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.
mkdir locale
./manage.py makemessages
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"
./manage.py compilemessages
Xem https://docs.djangoproject.com/en/1.3/topics/i18n/localization/#message-files
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')
from django.utils.translation import ugettext_lazy
Đừng quên thêm dòng này.
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/
Từ Django 2.0, bạn có thể chỉ cần thêm một dòng trong url.py
và 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 django
phiên bản của mình bằng cách
django-admin --version
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"
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.py
dự án của mình. Đi đến dưới cùng 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 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.
Có hai phương pháp để làm điều này:
1] By trọng base_site.html
trongdjango/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.py
củ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
.
Bạn chỉ cần ghi đè admin/base_site.html
mẫu (sao chép mẫu từ django.contrib.admin.templates
và đặt vào thư mục mẫu quản trị của riêng bạn) và thay thế branding
khối.