django 管理站点的两个实例 - 模板
Posted
技术标签:
【中文标题】django 管理站点的两个实例 - 模板【英文标题】:Two instances of django admin site - templates 【发布时间】: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/ 时,什么都没有发生。
有什么建议吗?
【问题讨论】:
【参考方案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 子类的模板的唯一方法是修改您提到的这个变量?即使,比方说,我不会修改默认管理员?以上是关于django 管理站点的两个实例 - 模板的主要内容,如果未能解决你的问题,请参考以下文章
Django 管理站点:TemplateDoesNotExist?