【问题标题】:Django root path not found after adding handler404添加handler404后找不到Django根路径
【发布时间】:2021-05-02 10:53:05
【问题描述】:

我在我的项目中添加了一个 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


    【解决方案1】:

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

    【讨论】:

    • 我不想丢失 URL 中默认语言的前缀。我有一个 VueJS 小部件,可以从路径中检索当前语言。您认为还有其他解决方案吗?
    • 删除这一行有助于解决问题。 handler404 = 'apps.webapp.views.handler404'
    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-17
    • 1970-01-01
    相关资源
    最近更新 更多