【问题标题】:django: how do I actually override admin site templatedjango:我如何实际覆盖管理站点模板
【发布时间】: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 是的,我对此非常确定。所以我现在真的为此摸不着头脑
  • 这似乎与:stackoverflow.com/questions/4938491/… 需要为 site_header 和 site_title 字段设置一个新值。
  • 我现在面临同样的问题。知道如何在自定义模板中引入用户工具“欢迎”“注销”等吗?

标签: python django django-admin


【解决方案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'
      

      【讨论】:

        猜你喜欢
        • 2015-06-14
        • 2013-01-23
        • 2018-10-22
        • 2019-05-02
        • 2018-02-01
        • 2011-07-26
        • 2013-12-25
        • 2012-06-23
        • 2017-02-19
        相关资源
        最近更新 更多