Django 从模板重定向到 AdminSite 视图

Django redirect to AdminSite Views from template

我通过子类化 AdminSite 在管理中创建了一些自定义视图。下面是:

class MyAdminSite(AdminSite):
    # login_template = 'screens/login.html'
    def get_urls(self):
        urls = super().get_urls()
        urls += [
             path('view', self.admin_view(self.home)),
             path('details',self.admin_view(self.details)),
             path('listing',self.admin_view(self.listing)),
        ]
        
        return urls

    def home(self, request):
        return render(request, 'base.html')
    
    def details(self,request):
        return render(request, 'screens/details.html')
    
    def listing(self,request):
        return render(request, 'screens/listing.html',content)


site =  MyAdminSite()

在 html 模板之一中,我想重定向到上面创建的视图之一。以下是我尝试过的,

<div class="bg-light border-right" id="sidebar-wrapper">
  <div class="sidebar-heading">Admin</div>
  <div class="list-group list-group-flush">
    <a href="{% url 'admin:details' %}" class="list-group-item list-group-item-action bg-light">Edit Details</a>
  </div>
</div

我尝试了 {% url 'admin:details' %}{% url 'admin/details' %},但我收到了这个错误:

 django.urls.exceptions.NoReverseMatch: Reverse for 'details' not found. 'details' is not a valid view function or pattern name.

我的主要 urls.py 的 urlpatterns 为:

urlpatterns = [
    path('admin/', admin.site.urls),
 
]

您必须为您的网址提供 name - path(Django Docs):

class MyAdminSite(AdminSite):
    # login_template = 'screens/login.html'
    def get_urls(self):
        urls = super().get_urls()
        urls += [
             path('view', self.admin_view(self.home), name="home_view"),
             path('details',self.admin_view(self.details), name="screen_details"),
             path('listing',self.admin_view(self.listing), name="screen_listing"),
        ]
        
        return urls

     ...

您可以在模板中使用:{% url 'admin:screen_details' %}

在视图或其他方法中:reverse("admin:screen_details")