根据Django版本覆盖管理模板

时间:2012-06-20 19:18:30

标签: django django-admin django-templates

有没有办法根据Django版本覆盖不同文件的管理模板?

我已经从Django管理模板中复制了admin/index.hml来实现这一点:Django admin, hide a model,但是在不同版本的Django中该模板有变化,有时页面中断(特别是弃用)在Django中的ADMIN_MEDIA_PREFIX 1.4)

我想在不同版本的Django的许多服务器上安装我的网站,但只使用一个统一的代码来自动注意版本。这可能吗?

我已经检查了Django documentation,但我还没有找到任何相关信息。

1 个答案:

答案 0 :(得分:2)

ModelAdmin类具有可在子类中指定的各种模板设置。在Django 1.3中,这些是(django.contrib.admin.options,第271行):

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

同样,AdminSite有各种模板设置(django.contrib.admin.sites,第35行):

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

您可以为子类覆盖这些子类,或者在代码的中心位置指定它们(例如,__init__.py文件)。例如:

from django.contrib.admin.sites import AdminSite
AdminSite.index_template = '...'

然后,您可以根据当前的Django版本更改模板。您可能需要检查早期Django版本中代码的样子,因为我还没有检查早期Django管理代码中是否存在所有这些变量。