你可以通过多种方式覆盖Django管理模板。
例如,下面是一个示例中的
django-project
。
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
└-templates
然后,在`settings.py`中,将`BASE_DIR / 'templates'`设置为`TEMPLATES`中的`DIRS`,使得`templates`文件夹能够被识别,如下所示:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
BASE_DIR / 'templates',
],
'APP_DIRS': True,
'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',
],
},
},
]
在
app1/models.py
中有
Food
和
Drink
模型,如下所示:
class Food(models.Model):
name = models.CharField(max_length=20)
class Drink(models.Model):
name = models.CharField(max_length=20)
在
app1/admin.py
中,如下所示,有
Food
和
Drink
的管理员。
@admin.register(Food)
class FoodAdmin(admin.ModelAdmin):
pass
@admin.register(Drink)
class DrinkAdmin(admin.ModelAdmin):
pass
现在,你可以在以下位置覆盖django管理模板
change_form.html:
templates/admin/
、
templates/admin/app1/
和
templates/admin/app1/food/
。*你可以从虚拟环境中复制
django管理模板,路径为
django/contrib/admin/templates/admin/
。有些django管理模板无法在
templates/admin/app1/
或
templates/admin/app1/food/
中被覆盖,但是
这些django管理模板可以在
templates/admin/
、
templates/admin/app1/
和
templates/admin/app1/food/
中被覆盖。你可以查看
我的回答,了解哪些django管理模板可以在哪些目录中被覆盖。
change_form.html
在 templates/admin/
目录下可以自动应用于所有应用程序中的所有管理员。*小写的文件夹名称 admin
正常工作:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
└-templates
└-admin
└-change_form.html # Here
change_form.html
在 templates/admin/app1/
下可以自动应用于 app1
中的所有管理员。*小写的文件夹名 app1
正常工作:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
└-templates
└-admin
|-app1
| └-change_form.html # Here
└-app2
下面的`change_form.html`在`templates/admin/app1/food/`中可以自动应用于`app1`中的`food`管理界面。*小写的文件夹名`food`正常工作:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
└-templates
└-admin
|-app1
| |-food
| | └-change_form.html # Here
| └-drink
└-app2
现在,您可以将
change_form.html
重命名为
custom_change_form.html
,但是任何文件夹中的
custom_change_form.html
都不能自动应用于任何应用程序中的任何管理员。因此,您需要手动将
custom_change_form.html
应用于您想要应用
custom_change_form.html
的任何应用程序中的任何管理员。
对于位于
templates/admin/
下的
custom_change_form.html
:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
└-templates
└-admin
└-custom_change_form.html # Here
将
admin/custom_change_form.html
设置为
change_form_template,如下所示,在
Food
和
Drink
管理员中。*您可以找到
更多自定义模板选项:
@admin.register(Food)
class FoodAdmin(admin.ModelAdmin):
change_form_template = 'admin/custom_change_form.html'
@admin.register(Drink)
class DrinkAdmin(admin.ModelAdmin):
change_form_template = 'admin/custom_change_form.html'
对于位于
templates/admin/app1/
下的
custom_change_form.html
文件:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
└-templates
└-admin
|-app1
| └-custom_change_form.html # Here
└-app2
将
admin/app1/custom_change_form.html
设置为
change_form_template
,如下所示,在
Food
和
Drink
管理员中:
@admin.register(Food)
class FoodAdmin(admin.ModelAdmin):
change_form_template = 'admin/app1/custom_change_form.html'
@admin.register(Drink)
class DrinkAdmin(admin.ModelAdmin):
change_form_template = 'admin/app1/custom_change_form.html'
对于位于templates/admin/app1/food
下的custom_change_form.html
:
django-project
|-core
| └-settings.py
|-app1
| |-models.py
| └-admin.py
|-app2
└-templates
└-admin
|-app1
| |-food
| | └-custom_change_form.html # Here
| └-drink
└-app2
将admin/app1/food/custom_change_form.html
设置为change_form_template
,如下所示,在Food
和Drink
管理员中:
@admin.register(Food)
class FoodAdmin(admin.ModelAdmin):
change_form_template = 'admin/app1/food/custom_change_form.html'
@admin.register(Drink)
class DrinkAdmin(admin.ModelAdmin):
change_form_template = 'admin/app1/food/custom_change_form.html'