【发布时间】:2021-07-13 19:08:49
【问题描述】:
def get_urls(self):
urls = super().get_urls()
url_patterns = [path("admin_profile", self.admin_view(self.profile_view))]
return urls + url_patterns
上述方法导致包罗万象的视图破坏了我在管理 URL 之后路由的 URL 模式并导致以下错误/异常:
找不到页面 (404) 请求方法:GET 请求 网址:http://127.0.0.1:8000/admin/admin_profile/ 提出 作者:django.contrib.admin.sites.catch_all_view
但这只会发生在
final_catch_all_view = 真
在
django.contrib.admin.sites.catch_all_view
设置时
final_catch_all_view = 假
没有错误或异常发生,一切正常。
现在我的问题是如何让函数在什么时候起作用
final_catch_all_view = 真
这就是文档对 catch_all 视图的评价:
> The new admin catch-all view will break URL patterns routed after the
> admin URLs and matching the admin URL prefix. You can either adjust
> your URL ordering or, if necessary, set AdminSite.final_catch_all_view
> to False, disabling the catch-all view. See What’s new in Django 3.2
> for more details.
附加 url 的类:
from django.contrib import admin
from django.template.response import TemplateResponse
from django.urls import path
class BookrAdmin(admin.AdminSite):
site_header = "Bookr Administration"
logout_template = "admin/logout.html"
def profile_view(self, request):
request.current_app = self.name
context = self.each_context(request)
return TemplateResponse(request, "admin/admin_profile.html", context)
def get_urls(self):
urls = super().get_urls()
url_patterns = [path("admin_profile", self.admin_view(self.profile_view))]
return url_patterns + urls
urls.py:
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from reviews import views
urlpatterns = [
path('accounts/', include(('django.contrib.auth.urls', 'auth'), namespace='accounts')),
path('accounts/profile/', views.profile, name='profile'),
path('admin/', admin.site.urls),
path('', include('reviews.urls')),
]
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
【问题讨论】:
-
请包含您的 urls.py 文件、您为其附加 URL 的类以及注册 ModelAdmin 类的代码。
-
包括在内;不确定 admin.py 代码在这里是否有帮助
-
我想知道使用
AdminSite.get_urls是否有问题。尝试将其应用于配置文件的 ModelAdmin 子类 docs.djangoproject.com/en/3.2/ref/contrib/admin/… 而不是 AdminSite。如果可行,您可以向后确定您原来的方法出了什么问题。