You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:57:32