我在Satchmo中配置Flatpages时遇到问题。我以前在纯粹的django应用程序中使用过它们,但现在它只是不起作用,当我尝试进入平面配置的站点时返回301 http错误。
我为配置它做了什么:
关于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/
。使用上面的配置会导致无限循环。
也许你知道这种行为的原因(重定向覆盖平面),也许你可以为这个问题建议一些有用的解决方案,或者对/
的请求应该做些什么。
答案 0 :(得分:1)
它返回301?这是页面永久移动(HttpResponsePermanentRedirect)并且在flatpages目录中没有引用它,所以我不认为它来自那里。事实上,在所有标准1.1.1版本中,HttpResponsePermanentRedirect
只有大约5个引用。
可能的方法:
当提出这样的问题时,最好通过显示来自settings.py(或其他)的适用部分的确切代码以及提供精确URL和网址等其他内容来获得非常特定。你试图匹配的py模式。
<强>更新强>
好的,一些随意的想法:
模式(r'^(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage'),
将匹配任何内容。之后的任何模式都永远不会被看到。
flatpages
无法直接调用,它在中间件中发挥了作用。它查找404响应(找不到页面),然后查看其表中是否存在该路径。如果是这样,它会调用呈现页面等的视图等。如果找不到匹配项,则让404继续通过中间件处理。
模式(r'', 'django.views.generic.simple.redirect_to', {'url' : '/shop/'}),
将匹配任何内容(我刚测试过)。如果要匹配空路径,请使用r('^$', etc.)
。这是你无限循环的源头。
如果您是正则表达式的新手,Django urls.py文件看起来像F * cking Magic。我建议非常简单地开始并一次添加一条规则。做一些快速测试,以确保新规则a)匹配你想要匹配的东西,b)不匹配它不应该的东西。特别是,请确保文件中稍后发生的某些规则仍可访问。在这种情况下,他们不应该举起红旗。