NoReverseMatch в /admin/ Reverse for 'app_list' with keyword arguments '{'app_label': 'admin_index'}' not found

я установил пользовательскую страницу администратора, где добавил ссылку на нужную мне страницу, код работал нормально, пока не попытался использовать dajngo_admin_index, что привело к тому, что app_list не был обнаружен, В проекте есть только 1 приложение под названием myapp

это мой admin.py :

# Customizing the Admin Interface
class CustomAdminSite(admin.AdminSite):
    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('analytics/', self.admin_view(analytics_view), name='custom_analytics'),
        ]
        return custom_urls + urls 

custom_admin_site = CustomAdminSite(name='custom_admin')

это мой urls.py для администратора :

from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings
from myapp.admin import custom_admin_site  

urlpatterns = [
    path('admin/', custom_admin_site.urls),  # Register custom admin URLs
    path('', include('myapp.urls')),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

этот новый шаблон администратора base_site.html :

{% extends "admin/base.html" %}

{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">SDM Administration</a></h1>
{% endblock %}

{% block user-tools %}
<ul class="user-tools">
    <li><a href="#">Test Link</a></li>
    <li><a href="{% url 'admin:password_change' %}">Change password</a></li>
    <li><a href="{% url 'logout' %}">Log out</a></li>
</ul>
{% endblock %}

{% block nav-global %}
<ul class="nav-global">
    <li>
        <a href="{% url 'admin:custom_analytics' %}" class="reports-link">Reports and Analytics</a>
    </li>
</ul>
<style>
    /* Styling for nav-global and reports-link */
    .nav-global {
        display: inline-block;
        margin-left: 30px;
        margin-top: 10px;  /* Move the button down by 3px */
        list-style-type: none;  /* Remove the bullet (yellow box) */
        padding-left: 0;  /* Ensure no padding is left */
    }
    .nav-global > li {
        display: inline-block;
    }
    .nav-global .reports-link {
        color: #fff;
        background-color: #2B3C4D; /* Blue background color */
        padding: 5px 15px;
        border-radius: 3px;
        text-decoration: none; 
        font-weight: bold;
        transition: background-color 0.3s ease;
    }
    .nav-global .reports-link:hover {
        background-color: #1d5a8a;
    }
</style>
{% endblock %}

любой

попытался изменить пользовательскую админку, чтобы она наследовала список приложений, но это не сработало:

class CustomAdminSite(AdminSite):
    site_header = "SDM Administration"
    site_title = "SDM Admin Portal"
    index_title = "Welcome to the SDM Admin Portal"
    site_url = '/tree/'

    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('analytics/', self.admin_view(analytics_view), name='custom_analytics'),
        ]
        return custom_urls + urls

    def app_list(self, request, app_label):
        context = {
            **self.each_context(request),
            'title': self.get_app_list_title(app_label, request),
            'app_label': app_label,
            'app_url': '',
        }
        return TemplateView.as_view(template_name='admin/app_list.html', extra_context=context)(request)

custom_admin_site = CustomAdminSite(name='custom_admin')

я считаю, что проблема в том, как я настраиваю свой пользовательский интерфейс администратора, что приводит к тому, что пользовательский администратор не наследует должным образом все компоненты, такие как app_list, которые ожидает django-admin-index.

Проблема здесь (частично) в том, что шаблон app_list URL добавляется условно на сайт администратора, в частности, он добавляется, когда на сайте администратора зарегистрирована хотя бы одна модель (чтобы ярлык приложения считался "действительным" на сайте администратора).

В вашем случае все идет не так:

  • У вас нет моделей, зарегистрированных на вашем пользовательском административном сайте! Это приводит к тому, что URL-адрес app_list не существует. ИЛИ На вашем сайте администратора не зарегистрировано ни одной модели из приложения admin_index, поэтому URL не соответствует

    .
  • Пакет django-admin-index не умеет изящно работать с пользовательскими сайтами администратора.

    В стандартных шаблонах сайта администратора, если шаблон URL app_list отсутствует, Django не сможет отрисовать ничего, что нуждается в этом URL (поскольку нет зарегистрированных моделей). С другой стороны, django-admin-index решает отрисовывать вещи в соответствии с записями в базе данных для их AppGroup модели.

Обычно используемый вами пакет не работает с пользовательскими сайтами администратора, но, учитывая ваши шаблоны url, не похоже, что вам нужно несколько сайтов администратора, поэтому вы можете просто переопределить сайт администратора по умолчанию, чтобы решить эту проблему. В вашем приложении создайте файл (допустим, apps.py) с содержимым следующего вида:

from django.contrib.admin.apps import AdminConfig


class MyAdminConfig(AdminConfig):
    default_site = "path.to.CustomAdminSite" # Update "path.to" to the actual module path

Затем в вашей INSTALLED_APPS настройке django.contrib.admin укажите путь к этому классу:

INSTALLED_APPS = [
    # ...
    "path.to.MyAdminConfig",  # replaces 'django.contrib.admin'
    # ...
]
Вернуться на верх