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

Django中urlpatterns触发urls.E004错误,该如何排查解决?

问题原因及解决办法

问题根源

你遇到的urls.E004错误,核心原因是Django要求urlpatterns必须是path()/re_path()实例的扁平列表,但你当前的写法把i18n_patterns返回的列表直接嵌套进了外层urlpatterns里。在Django 2.x中,i18n_patterns是一个生成URL模式列表的函数,它返回的是一个独立的列表,而非单个path/re_path实例,直接作为元素放入urlpatterns会导致结构不符合要求。

解决办法

你需要把基础URL模式和i18n_patterns生成的列表合并成一个扁平列表,而不是嵌套。修改后的代码如下:

from django.conf.urls import include, re_path
from django.contrib import admin
from django.conf.urls.i18n import i18n_patterns
import wagtailadmin_urls
import wagtaildocs_urls
import wagtail_urls

urlpatterns = [
    re_path(r'^dj-admin/', admin.site.urls),
    re_path(r'^admin/', include(wagtailadmin_urls)),
    re_path(r'^docs/', include(wagtaildocs_urls)),
]

# 将i18n生成的URL列表合并到urlpatterns中
urlpatterns += i18n_patterns(
    path(r'', include(wagtail_urls)),
    prefix_default_language=False
)

或者也可以直接在初始化时合并:

urlpatterns = [
    re_path(r'^dj-admin/', admin.site.urls),
    re_path(r'^admin/', include(wagtailadmin_urls)),
    re_path(r'^docs/', include(wagtaildocs_urls)),
] + i18n_patterns(
    path(r'', include(wagtail_urls)),
    prefix_default_language=False
)

补充说明

  • 注意prefix_default_language=False的语法:Python函数参数中不要在等号两侧加空格,保持语法规范(虽然原写法也能运行,但统一风格更易维护)。
  • 这样修改后,urlpatterns会变成一个包含所有合法URL模式实例的扁平列表,完全符合Django的配置要求,报错即可消除。

内容的提问来源于stack exchange,提问作者NarūnasK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:21:45