Добавить вид в панели администратора с тем же дизайном, что и у других

Я пытаюсь создать часть документации в моей панели администратора, и для этого я создал пользовательский сайт администратора. Я переопределил методы 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 и не боковую панель навигации :

enter image description here

Я понятия не имею, что я должен изменить/настроить, чтобы иметь такое же отображение, как и на других страницах администратора. Разве расширение 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)
Вернуться на верх