Django:我如何实际覆盖管理站点模板?

6

我知道这个问题已经被问答了多次,但我基本上查看了stackoverflow上的所有帖子,仍然无法使其工作。现在我只是尝试简单地更改管理站点标题。我有以下内容:

#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,但仍然没有任何变化。
现在我真的很沮丧,肯定需要一些帮助,谢谢
更新: 实际上,我发现本地模板确实有影响。 enter image description here 就像这里一样,最上面的白色条显示“#base_site.html!!@#”,这是我碰巧在my_site/templates/admin/base_site.html中作为注释放置的内容。所以它有点起作用了,但我还是不明白为什么我不能更改网站标题。

如果在编辑源模板时它无法正常工作,那么可能出现了一些非常奇怪的问题。你确定你正在从你认为的位置运行服务器吗? - Daniel Roseman
@DanielRoseman 是的,我非常确定。所以现在我真的很困惑。 - Hansong Li
https://docs.djangoproject.com/en/1.10/ref/contrib/admin/#customizing-adminsite - allcaps
这似乎与以下内容有关:https://dev59.com/XG445IYBdhLWcg3wTIZf 需要为site_header和site_title字段设置新值。 - Rodolfo Ortega
我现在也遇到了同样的问题。有什么办法可以将用户工具“欢迎”、“注销”等带入自定义模板中吗? - surya raj
5个回答

12

请在settings中'django.contrib.admin'之前添加您的Django应用程序 -> INSTALLED_APPS。在INSTALLED_APPS中应用程序的顺序很重要。

# settings.py

...
INSTALLED_APPS = [
    "your_app.yourAppConfig", # add your app here
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
...

使用my_site/my_app/templates/admin/base_site.html

将您的应用程序放置在定义此模板之前的位置'django.contrib.admin',在INSTALLED_APPS

源链接


谢谢,但我非常确定我已经做了所有这些事情,但还是徒劳无功。 - Hansong Li
1
我之前并不知道在INSTALLED_APPS中加载顺序是至关重要的。我将我的应用程序放在第三方包之上,现在它正在使用我的自定义模板。谢谢! - jturi
这是我的问题,而且很难找到。 - monkut
@jturi,那解决了我的问题,谢谢!如果你的 base_site.html 模板文件夹在某个应用程序内部,那么该应用程序必须在 django.contrib.admin 之前被包含。 - kloddant

10

首先打开你的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文档 - 覆盖管理站点

希望这有所帮助。


3

因此,您应删除包括花括号在内的部分,只写出您想要的文本。

删除: `{{ site_title|default:_('NEW TITLE') }}`  写作: NEW TITLE
删除: `{{ site_header|default:_('NEW TITLE' }}`  写作: NEW TITLE

还要确保您将文件夹(templates/admin)放置在项目的根目录中。根目录是所有应用程序文件夹和manage.py文件的容器。

换句话说,“templates”文件夹应该与manage.py文件处于同一级别。

您的文件夹结构应如下所示:

mysite/
    templates/
        admin/
            base_site.html
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    ...
    ...

1
我不确定是否理解正确,但您可以通过以下方法轻松更改标题:
在 "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'

然后它应该能够为您完成工作。

我喜欢在Django应用程序的admin.py中添加admin.site.site_header = 'My New Title'admin.site.site_title = 'My New Title' - azmirfakkri

0
要更改Django管理站点的标题,您可以在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'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接