【问题标题】:Django 1.10 & Django-cms 3.4.4 - NoReverseMatch for some browsersDjango 1.10 和 Django-cms 3.4.4 - 某些浏览器的 NoReverseMatch
【发布时间】:2017-08-07 20:14:29
【问题描述】:

我偶然发现了一个非常奇怪的问题。开发环境是 Django 1.10 和 django-cms 3.4.4。当我尝试在 Chrome 和 Firefox 中加载 localhost 时,一切正常,但如果我尝试在 Safari 中打开它,它会因 NoReverseMatch at / 而失败,并且它会因随机 url 而失败。我也试过了

curl http://localhost:8000/ 

而且效果很好。 还在 Windows 和不同的浏览器上尝试过,但对于某些具有相同错误的浏览器,它会失败。 有人知道可能是什么问题吗? 谢谢!

附言

Reverse for 'model' with arguments '(u'bmw',)' and keyword arguments '{}' not found. 0 pattern(s) tried: []

它似乎根本不加载任何网址。 尝试了 0 个模式意味着我猜没有加载任何内容?

【问题讨论】:

  • curl -I http://localhost:8000/ 返回什么?
  • HTTP/1.0 200 OK Date: Tue, 08 Aug 2017 19:32:39 GMT Server: WSGIServer/0.1 Python/2.7.13 Content-Language: bg Expires: Tue, 08 Aug 2017 19:33:39 GMT Vary: , Accept-Language, Cookie Last-Modified: Tue, 08 Aug 2017 19:32:39 GMT Cache-Control: max-age=60 X-Frame-Options: SAMEORIGIN Content-Type: text/html; charset=utf-8 Set-Cookie: csrftoken=cjyVDImNRxEsijnKlMHrzAHgXSObdhxfWzTY5VTehmAWS6HRU5P99RJ2Wq0i98bj; expires=Tue, 07-Aug-2018 19:32:39 GMT; Max-Age=31449600; Path=/ Set-Cookie: django_language=bg; expires=Wed, 08-Aug-2018 19:32:39 GMT; Max-Age=31536000; Path=/

标签: python django django-cms


【解决方案1】:

我想我找到了。长话短说

默认 cms 配置为使用英语作为主要语言,但我希望我的主要语言是保加利亚语。我将 CMS 配置为支持两种语言,并且我已将保加利亚语设置为默认设置,并且禁用了英语。然后我去掉了 urls.py 中的 i18n_patterns() 包装器以去掉 /en/ /bg/ 等前缀。到目前为止,一切都很好。管理站点运行良好。只有一种语言 - 保加利亚语,附有页面和自定义应用程序。当我在 Safari 上加载带有错误 url 的前端只是为了查看所有受支持的 URL 时,我看不到任何附加的应用程序和它们的 url。如果我对 Chrome 执行相同操作 - 它会显示所有附加应用程序的 url。事实证明,Chrome 会加载保加利亚语页面配置和所有已配置的应用程序,但 Safari 会加载已禁用且没有附加应用程序的英文页面。

我的第一个猜测是 Accept-Language 标题。 Safari 使用Accept-Language: en,但其他浏览器发送 bg。我试图篡改数据,但什么也没发生。然后我注意到LocaleMiddleware 使用了一个django_language cookie,它实际上决定了语言。当我禁用中间件时,一切都像魅力一样工作。

谢谢!

【讨论】:

    猜你喜欢
    • 2017-08-19
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-26
    • 2018-11-15
    • 1970-01-01
    • 2014-02-10
    相关资源
    最近更新 更多