【问题标题】:making djangocms url resolvers less greeady使 django cms url 解析器不那么贪婪
【发布时间】:2017-08-07 07:36:35
【问题描述】:

我有一个高流量的 django-cms 网站。在同一个站点上,还有一个带有 restful api 的附加 django 应用程序。
我有以下 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。

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-28
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多