django - 添加handler404后找不到Django根路径
问题描述
我在我的项目中添加了一个 handler404,它立即破坏了根路径并显示了 404 页面。我想知道如何更改我的 urls.py 以使其与 i18n_patterns 一起正常工作。我将不胜感激有关此问题的任何建议。
带有语言前缀的 URL 可以正常工作。
mysite.com 404 why????
mysite.com/en/ OK
mysite.com/fr/ OK
mysite.com/gffg 404
这是我的项目的 urls.py。
urlpatterns = i18n_patterns(
path('admin/', admin.site.urls),
path('i18n/', include('django.conf.urls.i18n')),
#apps
path('', include('apps.webapp.urls')),
path('user/', include('apps.userapp.urls')),
path('client-area/', include('apps.accountapp.urls')),
#additional paths
path('sitemap.xml', sitemap, {'sitemaps': sitemaps},
name='django.contrib.sitemaps.views.sitemap'),
path('ckeditor/', include('ckeditor_uploader.urls')),
path('rosetta/', include('rosetta.urls')),
) + [
path("robots.txt", TemplateView.as_view(template_name="web/robots.txt", content_type="text/plain"),),
]
handler404 = 'apps.webapp.views.handler404'
解决方案
i18n_patterns
有一个关键字参数prefix_default_language
,其默认值为True
. 根据文档它:
将prefix_default_language设置为False会从默认语言 ( LANGUAGE_CODE ) 中删除前缀。这在将翻译添加到现有站点时很有用,这样当前的 URL 就不会改变。
您尚未False
在代码中将其设置为,因此您最终没有匹配的模式mysite.com
。将关键字参数添加到函数调用中,这样您就不需要默认语言的前缀:
urlpatterns = i18n_patterns(
path('admin/', admin.site.urls),
...,
prefix_default_language=False,
)