Django的Satchmo和flatpages问题

时间:2009-12-18 15:57:41

标签: django satchmo django-flatpages

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

我为配置它做了什么:

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

关于flatpages配置的文档。

我感到无助。不知道我怎么能调试这个问题。有什么想法?

当然有帮助表示赞赏。

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

urlpatterns只有一个条目:

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

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

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

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

也许你知道这种行为的原因(重定向覆盖平面),也许你可以为这个问题建议一些有用的解决方案,或者对/的请求应该做些什么。

1 个答案:

答案 0 :(得分:1)

它返回301?这是页面永久移动(HttpResponsePermanentRedirect)并且在flatpages目录中没有引用它,所以我不认为它来自那里。事实上,在所有标准1.1.1版本中,HttpResponsePermanentRedirect只有大约5个引用。

可能的方法:

  1. 注释掉FlatPages中间件并查看错误是否发生了变化(我打赌不会)。
  2. 尝试更改MIDDLEWARE类的顺序,看看是否有变化。
  3. 当提出这样的问题时,最好通过显示来自settings.py(或其他)的适用部分的确切代码以及提供精确URL和网址等其他内容来获得非常特定。你试图匹配的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.)。这是你无限循环的源头。

    4. 如果您是正则表达式的新手,Django urls.py文件看起来像F * cking Magic。我建议非常简单地开始并一次添加一条规则。做一些快速测试,以确保新规则a)匹配你想要匹配的东西,b)不匹配它不应该的东西。特别是,请确保文件中稍后发生的某些规则仍可访问。在这种情况下,他们不应该举起红旗。