首页 > 解决方案 > 添加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'

标签: django

解决方案


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,
)

推荐阅读