Django项目出现urls.E004错误:URL模式无效问题咨询
解决Django urls.E004错误:URL模式无效问题
先看你遇到的错误提示:
ERRORS: app_1 | ?: (urls.E004) 您的URL模式[<URLPattern '^static/media/(?P
.)$'>]无效,请确保urlpatterns是path()和/或re_path()实例的列表。app_1 | ?: (urls.E004) 您的URL模式[<URLPattern '^static/static/(?P . )$'>]无效,请确保urlpatterns是path()和/或re_path()实例的列表。
问题出在你用urlpatterns.extend()的方式上——Django的static()函数返回的是一个包含URL模式的列表,而你现在把它作为单个元素放到了extend的列表里,这就导致urlpatterns中混入了列表类型的元素,而不是纯粹的path()/re_path()实例,所以触发了E004错误。
看你的代码:
urlpatterns = [ path("admin/", admin.site.urls), path("api/v1/jobs/", include("jobs.urls")), path("api/v1/company/", include("company.urls")), ] if settings.DEBUG: urlpatterns.extend( [ static("/static/static/", document_root="/vol/web/static"), static("/static/media/", document_root="/vol/web/media"), path("__debug__/", include(debug_toolbar.urls)), ] )
这里的static(...)会返回类似[re_path(...)]的列表,当你把它放到extend的列表中时,相当于给urlpatterns添加了一个列表元素,而不是把列表里的URL模式直接加进去。
修正方法
把static()的结果直接扩展到urlpatterns中,而不是嵌套在另一个列表里,有两种常用方式:
方式一:用+=直接拼接列表
urlpatterns = [ path("admin/", admin.site.urls), path("api/v1/jobs/", include("jobs.urls")), path("api/v1/company/", include("company.urls")), ] if settings.DEBUG: # 直接把static返回的列表拼接到urlpatterns里 urlpatterns += static("/static/static/", document_root="/vol/web/static") urlpatterns += static("/static/media/", document_root="/vol/web/media") # 添加debug toolbar的路径 urlpatterns.append(path("__debug__/", include(debug_toolbar.urls)))
方式二:多次调用extend()
urlpatterns = [ path("admin/", admin.site.urls), path("api/v1/jobs/", include("jobs.urls")), path("api/v1/company/", include("company.urls")), ] if settings.DEBUG: urlpatterns.extend(static("/static/static/", document_root="/vol/web/static")) urlpatterns.extend(static("/static/media/", document_root="/vol/web/media")) urlpatterns.append(path("__debug__/", include(debug_toolbar.urls)))
这样处理后,urlpatterns里就只有path()和re_path()(static()内部用的是re_path)实例,不会再触发E004错误了。
内容的提问来源于stack exchange,提问作者user9150424
相关产品推荐
相关产品推荐

