Skip to main content
 首页 » 编程设计

python之如何覆盖 Django 的默认管理模板和布局

2024年10月17日37shangdawei

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

我做了以下事情:

  1. 我在我的应用程序目录 /opt/mydjangoapp/templates/admin 中创建了一个文件夹
  2. 然后我将原来的 django admin templates 文件夹内容复制到 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 版本似乎忽略了我的模板更改并加载了原始模板文件。关于如何覆盖管理员的原始布局的任何建议。请记住,更改标题只是我要执行的更改的开始?

请您参考如下方法:

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

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

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