Django Admin:为两个管理站点使用不同的模板

Posted

技术标签:

【中文标题】Django Admin:为两个管理站点使用不同的模板【英文标题】:Django Admin: using different templates for two admin site 【发布时间】:2011-07-22 05:10:57 【问题描述】:

我有一个带有两个不同管理站点的 Django 项目(如 documentation 中所述)

我想为每个人提供不同的自定义模板。 我知道如何通过将 html 文件放在 myproject/templates/admin/ 目录中来覆盖自定义模板。 但是,两个管理站点都使用这些模板!

我不明白如何指定另一组自定义模板。

理想情况下,我想要:

# For first admin site
myproject/templates/admin-a/
   base.html
   base_site.html

和:

# For second admin site
myproject/templates/admin-b/
   base.html
   base_site.html

【问题讨论】:

【参考方案1】:

第一个选项是有两个ModelAdmin 类,一个派生自第二个,带有一些附加参数定义模板,这里是管理代码的一部分:

# Custom templates (designed to be over-ridden in subclasses)
add_form_template = None
change_form_template = None
change_list_template = None
delete_confirmation_template = None
delete_selected_confirmation_template = None
object_history_template = None

以上变量可以在你的管理类中设置。

第二种方法是将基本模板名称传递给模板,然后将此(变量)用作extends模板标签的参数。 Documentation here.

第三个选项是运行两个代码实例,但两个配置具有不同的设置变量TEMPLATE_DIRS,第一个例如:

TEMPLATE_DIRS = ('templates-a',)

TEMPLATE_DIRS = ('template-b', 'template-a')

同时拥有两个模板目录会为您提供一个 fallback 选项,因此您将只定义那些不同的模板。

第三个选项最容易实现(无需更改代码),但它需要 2 个独立的实例同时工作(消耗更多系统资源)。

【讨论】:

谢谢。我会尝试不同的选项,但第一个似乎最容易实现。但是,在所有提供的管理模板中,都有硬编码的“admin/”路径。我想我必须复制并覆盖所有这些。也许在模板名称中使用变量可能是个好主意

以上是关于Django Admin:为两个管理站点使用不同的模板的主要内容,如果未能解决你的问题,请参考以下文章

在应用程序 django 中使用 % url 'admin' % 引用管理站点

django基础知识之后台管理Admin站点:

Django学习:创建admin后台管理站点

Django站点管理——管理站点

Django-admin站点管理的详细使用

Django 中Admin站点的配置