django:我如何实际覆盖管理站点模板
Posted
技术标签:
【中文标题】django:我如何实际覆盖管理站点模板【英文标题】:django: how do I actually override admin site template 【发布时间】:2017-01-01 02:42:42 【问题描述】:我知道这个问题被问了好几次,但我基本上浏览了所有关于堆栈溢出的帖子,但仍然无法让它工作。现在我只是想简单地更改管理站点标题。我有以下内容:
#base_site.html
% extends "admin/base_site.html" %
% block title % title | site_title|default:_('NEW TITLE') % endblock %
% block branding %
<h1 id="site-name"><a href="% url 'admin:index' %"> site_header|default:_('NEW TITLE') </a></h1>
% endblock %
% block nav-global %% endblock %
我试着把它放进去
my_site/templates/admin/base_site.html,
my_site/templates/admin/my_app/base_site.html,以及
my_site/my_app/templates/admin/base_site.html,
但这些都不起作用。
settings.py:
TEMPLATES = [
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'OPTIONS':
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
'loaders': [
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
],
,
,
]
我也尝试直接更改 django\contrib\admin\templates\admin\base_site.html 但仍然没有任何反应。
我现在真的很沮丧,肯定需要一些帮助,谢谢
更新: 其实我发现本地模板确实有效果。
就像这里一样,最上面的白条显示“#base_site.html!!@#”,这是我在 my_site/templates/admin/base_site.html 中偶然添加的评论。所以它有点工作,但我仍然不明白为什么我不能更改网站标题。
【问题讨论】:
如果在您编辑源模板时它无法正常工作,那么就会发生一些非常奇怪的事情。你确定你是从你认为你所在的地方运行服务器吗? @DanielRoseman 是的,我对此非常确定。所以我现在真的为此摸不着头脑 docs.djangoproject.com/en/1.10/ref/contrib/admin/… 这似乎与:***.com/questions/4938491/… 需要为 site_header 和 site_title 字段设置一个新值。 我现在面临同样的问题。知道如何在自定义模板中引入用户工具“欢迎”“注销”等吗? 【参考方案1】:在 settings.INSTALLED_APPS 中的“Django.contrib.admin”上方添加您的 Django 应用程序。顺序很重要。
使用 my_site/my_app/templates/admin/base_site.html
将您的应用放在您之前定义此模板的位置 'django.contrib.admin',在 INSTALLED_APPS 中
source link
【讨论】:
谢谢,但我很确定我已经做了所有这些,但还是徒劳 我现在不知道加载顺序在 INSTALLED_APPS 中至关重要。我把我的应用放在了 3.party 包之上,现在它正在使用我的自定义模板,谢谢! 这是我的问题,很难找到。 @jturi 这解决了我的问题,谢谢!如果您拥有 base_site.html 的模板文件夹位于应用程序内,则必须在 django.contrib.admin 之前包含该应用程序。【参考方案2】:首先打开你的 settings.py 并添加一个模板文件夹:
TEMPLATES = [
'DIRS': [
'/path/to/your/django-project/templates', # Absolute Path
# os.path.join(BASE_DIR, 'templates') # Relative Path
],
...
然后将文件 base_site.html 移动到以下目录。 将结构保留在文件系统上很重要。
/path/to/your/django-project/templates/admin/base_site.html
base_site.html 的内容:
% extends "admin/base_site.html" %
% block title % title | site_title|default:_('NEW TITLE') % endblock %
% block branding %
<h1 id="site-name"><a href="% url 'admin:index' %">Your new Title</a></h1>
% endblock %
% block nav-global %% endblock %
Django Documentation - Overriding Admin Site
希望对您有所帮助。
【讨论】:
【参考方案3】:所以你应该删除包括花括号的内容,然后只写你想要的文本。
删除:` site_title|default:_('NEW TITLE') ` 写入:NEW TITLE 删除:` site_header|default:_('NEW TITLE' ` 写入:NEW TITLE还要确保将文件夹 (templates/admin) 放在项目的根目录中。根目录是所有应用文件夹的容器,也是 manage.py 文件。
换句话说,您要创建的“templates”文件夹应该与manage.py文件处于同一级别。
您的文件夹结构应如下所示:
我的网站/ 模板/ 行政/ base_site.html 管理.py 我的网站/ __init__.py 设置.py 网址.py wsgi.py ... ...【讨论】:
【参考方案4】:我不确定我是否理解正确。但您可以通过以下方式轻松更改标题:
在“urls.py”文件中
from django.contrib import admin
urlpatterns = [
path('admin/', admin.site.urls),
.......
]
admin.site.site_header = 'My New Title'
admin.site.site_title = 'My New Title'
那么它应该会为你完成工作。
【讨论】:
我喜欢把admin.site.site_header = 'My New Title'
和admin.site.site_title = 'My New Title'
放在Django app的admin.py中【参考方案5】:
要更改 Django Admin 站点标题,您可以在 Django 应用的 admin.py
中添加这两行:
from django.contrib import admin
# change Django admin title
admin.site.site_title = 'My Blog Admin'
# change Django admin site header
admin.site.site_header = 'My Blog Admin'
【讨论】:
以上是关于django:我如何实际覆盖管理站点模板的主要内容,如果未能解决你的问题,请参考以下文章
如何在 django 管理面板中完全自定义 sidebar_menu?