Добавить вид в панели администратора с тем же дизайном, что и у других
Я пытаюсь создать часть документации в моей панели администратора, и для этого я создал пользовательский сайт администратора. Я переопределил методы get_app_list
и get_urls
, чтобы отобразить новую строку в навигационной панели и в приборной панели, и я создал представление, на которое перенаправляется эта строка :
class MyAdminSite(admin.AdminSite):
def get_app_list(self, request):
app_list = super().get_app_list(request)
app_list += [
{
"name": "Documentation",
"app_label": "my_test_app",
"models": [
{
"name": "Scripts modification",
"object_name": "Scripts modification",
"admin_url": "/admin/documentation/modif/",
"view_only": True,
}
],
}
]
return app_list
def get_urls(self):
urls = super().get_urls()
my_urls = [
path('documentation/modif/', self.admin_view(self.modif)),
]
return my_urls + urls
def modif(self, request):
context = {
'title':"Documentation",
}
return render(request, "documentation/scripts_modification.html", context)
Все работает правильно, и при нажатии на новую строку я перенаправляюсь на новое представление, которое я создал. Однако я хочу, чтобы мое представление имело тот же дизайн, что и остальная часть панели администратора, а я не знаю, как это сделать.
Я расширил admin/base_site.html
, но получил только верхнюю часть страницы, а не панель view site log out
и не боковую панель навигации :
Я понятия не имею, что я должен изменить/настроить, чтобы иметь такое же отображение, как и на других страницах администратора. Разве расширение base_site.html
не должно отображать то, что я хочу? Я чего-то не понимаю и не могу найти, что и где об этом узнать.
Я наконец-то нашел причину, почему он не работал!
В if
(который расширен в admin/base.html
) есть много предложений admin.base_site.html
, которые проверяют значения нескольких переменных.
Для отображения правой верхней панели переменная has_permissions
должна быть установлена в значение True
, а для того, чтобы появилась ссылка view site
, переменная site_url
должна быть установлена в значение url сайта.
Теперь, чтобы отобразить панель навигации, is_nav_sidebar_enabled
нужно установить значение True
и available_apps
должно содержать все приложения для отображения.
Добавив все это в контекст шаблона, все отображается правильно, как и на остальной части админпанели.
И мой код теперь выглядит так :
class MyAdminSite(admin.AdminSite):
def get_app_list(self, request):
app_list = super().get_app_list(request)
app_list += [
{
"name": "Documentation",
"app_label": "documentation",
"models": [
{
"name": "Scripts modification",
"object_name": "Scripts modification",
"admin_url": "/admin/documentation/modif/",
"view_only": True,
}
],
}
]
return app_list
def get_urls(self):
urls = super().get_urls()
my_urls = [
path('documentation/modif/', self.admin_view(self.modif)),
]
return my_urls + urls
def modif(self, request):
context = {
'title':"Documentation",
'has_permission': True,
'site_url': reverse('scripts:scripts'),
'is_nav_sidebar_enabled': True,
'available_apps': self.get_app_list(request),
}
return render(request, "documentation/scripts_modification.html", context)