使djangocms url解析器不那么绿

时间:2017-03-16 08:30:24

标签: python django django-cms

我有一个高流量的django-cms网站。在同一个网站上还有一个额外的django应用程序,带有一个安静的api 我有以下urls.py

urlpatterns = [

    url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap',
        {'sitemaps': {'cmspages': CMSSitemap}}),
    url(r'^taggit_autosuggest/', include('taggit_autosuggest.urls')),
    url(r'^select2/', include('django_select2.urls')),
    url(r'^api/', include('api.urls')),
]

urlpatterns += i18n_patterns(    
    url(r'^admin/', include(admin.site.urls)),
    url(r'^', include('cms.urls')),
)

问题在于,如果api在应用程序级别为其一个url返回404(例如/api/post/15),则urls.py定义中的最后一行拦截404,并返回302,重定向到/en/api/post/15(假设英语是默认语言)。

此行为适用于所有CMS URI,但不适用于API,因为它只会增加流量。如何避免django-cms url不拦截API中的404。

1 个答案:

答案 0 :(得分:0)

这实际上可能是一个Django错误。 django CMS不会拦截404,如果在应用程序级别引发404,那么django的语言环境中间件将捕获它并执行重定向。我认为这是一个错误,因为它不应该拦截显式应用程序404s,或者在中间件中它应该使用请求中的解析器匹配来查看匹配的模式是否是i18n。