0

我在 Satchmo 中配置 Flatpages 时遇到问题。我以前在纯 django 应用程序中使用过它们,但现在它不起作用,当我尝试进入平面配置站点时返回 301 http 错误。

我做了什么来配置它:

  • 将中间件“django.contrib.flatpages.middleware.FlatpageFallbackMiddleware”添加到 MIDDLEWARE_CLASSES 作为列表中的最后一个,
  • 在管理模块中配置示例页面。

简单来说就是文档对 flatpages 配置的评价。

我感到很无助。不知道我该如何调试这个问题。对此有什么想法吗?

当然,帮助表示赞赏。

感谢彼得的建议,我已经设法将问题缩小到我的 urls.py 文件,用于 satchmo 商店。

urlpatterns 只有一个条目:

(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),

此版本不起作用,而且会干扰平面页面。但是从 MIDDLEWARE_CLASSES 禁用平面页面并将其添加到 urls.py 就像下面的代码片段一样:

(r'^(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage'),
(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),

然而,下一个问题是从/to的重定向/shop/。使用上述配置会导致无限循环。

也许你知道这种行为的原因(重定向覆盖平面页面),也许你可以建议一些可行的解决方案来解决这个问题,或者应该如何处理对/.

4

1 回答 1

1

它返回301?那是 Page Moved Permanently (HttpResponsePermanentRedirect) 并且在 flatpages 目录中没有对它的引用,所以我不认为它来自那里。事实上,HttpResponsePermanentRedirect在所有标准 1.1.1 版本中只有大约 5 个引用。

可能的方法:

  1. 注释掉 FlatPages 中间件,看看错误是否改变(我打赌它不会改变)。
  2. 尝试更改 MIDDLEWARE 类的顺序,看看是否有变化。

当提出这样的问题时,最好通过显示来自 settings.py (或其他)的适用部分的确切代码并提供其他内容(例如精确的 URL 和您尝试匹配的 urls.py 模式)来非常具体。

更新:

好的,一些随机的想法:

  1. 该模式(r'^(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage'),将匹配任何东西。之后的任何模式都将永远不会被看到。

  2. flatpages直接调用不起作用,它在中间件中发挥了作用。它查找 404 响应(未找到页面),然后查看该路径是否存在于其表中。如果是这样,它会调用一个视图来呈现页面等。如果它没有找到匹配项,那么让 404 继续通过中间件处理。

  3. 该模式(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),将匹配任何东西(我刚刚测试过)。如果要匹配空路径,请使用r('^$', etc.). 这是你无限循环的来源。

如果您不熟悉正则表达式,那么 Django urls.py 文件可能看起来像 F*cking Magic。我建议非常简单地开始,一次添加一条规则。做一些快速测试以确保新规则 a) 匹配您希望它匹配的内容,并且 b)不匹配它不应该匹配的内容。特别是,确保文件中稍后出现的某些规则仍然可以访问。在这种情况下,他们不会是应该引起红旗的。

于 2009-12-18T22:59:20.760 回答