【问题标题】:How do I override Django's default admin templates and layouts如何覆盖 Django 的默认管理模板和布局
【发布时间】:2017-01-27 16:04:12
【问题描述】:

我正在尝试覆盖 Django 的默认模板。现在只是 base_site.html。我正在尝试更改文本 django 管理。

我做了以下事情:

  1. 我在我的应用程序目录中创建了一个文件夹/opt/mydjangoapp/templates/admin
  2. 然后我将原始 django admin 模板文件夹的内容复制到 admin 中,内容如下: 404.html auth change_list.html delete_selected_confirmation.html index.html pagination.html search_form.html 500.html base.html change_list_results.html edit_inline invalid_setup.html popup_response.html submit_line.html actions.html base_site.html date_hierarchy.html filter.html login.html prepopulated_fields_js.html app_index.html change_form.html delete_confirmation.html 包括 object_history.html related_widget_wrapper.html
  3. 我更改了 base_site.html 的内容,因此我的标题是“My App Admin”,而不是“Django Administration
  4. 我的设置文件如下:

    INSTALLED_APPS = (
        'mydjangoapp',
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'debug_toolbar',
    )
    
    ...
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': ['/opt/mydjangoapp/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',
                ],
                'debug':True,
                'loaders': (
                     'django.template.loaders.filesystem.Loader',
                     'django.template.loaders.app_directories.Loader'
                ),
            },
        },
    ]
    

但不幸的是,Django 1.8 版似乎忽略了我的模板更改并加载了原始模板文件。关于如何覆盖管理员的原始布局的任何建议。记住更改标题只是我想要执行的更改的开始?

【问题讨论】:

  • 你也可以发布你的INSTALLED_APPS 吗?
  • @PauloScardine 你去 :-) INSTALLED_APPS = ('mydjangoapp', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django. contrib.sessions','django.contrib.messages','django.contrib.staticfiles','debug_toolbar',)
  • 看起来不错,首先列出了您的应用程序...我怀疑您必须在应用程序中移动模板文件夹(/opt/mydjangoapp/mydjangoapp/templates/ 而不是/opt/mydjangoapp/templates/)。我猜settings.TEMPLATES['DIRS'] 是全局模板,不与任何特定应用绑定,因此它们的优先级最低。
  • @PauloScardine 谢谢,那行得通。不知道为什么我没有想到。
  • @PauloScardine 也许添加为答案,以便我可以将其标记为正确。

标签: python django


【解决方案1】:

首先,确保您的应用程序列在最前面,因为 Django 总是按照settings.INSTALLED_APPS 中的顺序从找到资源的第一个应用程序中获取资源。

在这种情况下,应用程序首先列出,但覆盖不起作用,因为模板被放置在settings.TEMPLATES['DIRS'] 下列出的全局模板目录下,这些目录与任何特定应用程序无关,优先级最低。

如果是这种情况,您必须在应用内移动模板文件夹(例如,/opt/mydjangoapp/mydjangoapp/templates/ 而不是/opt/mydjangoapp/templates/)并擦除settings.TEMPLATES['DIRS'] 处的引用。

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 2012-03-15
    • 2013-01-23
    • 2016-06-04
    • 2011-01-24
    • 1970-01-01
    • 2018-06-21
    • 2013-04-12
    • 2011-09-28
    相关资源
    最近更新 更多