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
相关产品推荐
相关产品推荐

