【问题标题】:Two instances of django admin site - templatesdjango 管理站点的两个实例 - 模板
【发布时间】:2013-12-25 18:25:09
【问题描述】:

出于某种原因,我需要在我的项目中有两个不同的 Django 管理站点实例——默认管理站点和一个从 AdminSite 继承的类实例。

所以我创建了一个类MyAdminSite(AdminSite)

然后我写了类似的东西:

my_admin_site = MyAdminSIte(name='myadmin')

然后我在 urls.py 中添加了正确的条目。

一切正常。

但现在我想自定义一些模板。
在settings.py中:

BASE_DIR = os.path.dirname(os.path.dirname(__file__))
TEMPLATE_DIRS = (os.path.join(BASE_DIR, 'templates'),)

然后我创建了目录: /PROJECTDIR/templates/admin/PROJECTDIR/templates/myadmin

问题是,我根本无法在“myadmin”django 管理站点中扩展/覆盖模板。 例如,如果我在 /templates/admin/ 中添加一个空的“base_site.html”,那么两个管理站点都会变为空白。

但是当我将相同的文件添加到 /templates/myadmin/ 时,什么都没有发生。

有什么建议吗?

【问题讨论】:

    标签: python django


    【解决方案1】:

    你可以覆盖AdminSite的类变量来指定不同的模板:

    app_index_template = None
    login_template = None
    logout_template = None
    password_change_template = None
    password_change_done_template = None
    

    你也可以覆盖ModelAdmin的类变量来指定不同的模板:

    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
    

    例如:

    class MyAdminSite(AdminSite):
        app_index_template = "my/new/admin/app_index.html"
    

    【讨论】:

    • 是的,我确实知道。但是是否有任何选项可以以与默认 django 管理站点相同的方式执行此操作?
    • 是的,您可以继承 AdminSite 并使用该对象。例如:docs.djangoproject.com/en/dev/ref/contrib/admin/…
    • 但我实际上是 AdminSite 的子类化,它工作得很好,除了模板。我们是不是误会了?
    • 如果您希望默认管理员的模板也发生变化,那么您还需要在那里使用 AdminSite 的子类。因此,对于您希望使用不同模板的每个管理界面,您需要使用上面的模板变量创建 AdminSite 的子类。或者,您可以照常替换默认模板,并使用上述答案中的变量为您的第二个管理员指定新模板。
    • 好的,这是唯一的方法吗?自定义 AdminSite 子类的模板的唯一方法是修改您提到的这个变量?即使,比方说,我不会修改默认管理员?
    猜你喜欢
    • 2011-07-22
    • 2015-11-19
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多