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'
# ...
]