Django抓取所有URL而不破坏APPEND_SLASH

时间:2011-07-01 08:59:39

标签: django

我在urls.py中有一个条目,它充当了一个全能的,如果在数据库中找到合适的页面,它会加载一个简单的视图。这种方法的问题在于,URL解算器将永远不会失败,这意味着APPEND_SLASH功能不会启动 - 我需要它。

我宁愿不必为静态页面URL添加前缀来阻止它成为一个包罗万象的东西。我确实知道flatpages,它使用404钩子而不是urls.py中的条目,我有点希望避免使用它,但我想这个问题可能正是人们会使用它的原因。

任何解决这个问题的方法,还是应该让步并使用flatpages?

2 个答案:

答案 0 :(得分:60)

确保您的catch-all URL模式最后有一个斜杠,并且该模式是您的URLconf中的最后一个。如果catch-all模式不以斜杠结束,那么它将在中间件尝试附加斜杠之前匹配杂散URL。

例如,使用r'^.*/$'代替r'^.*'作为最后一种模式。

要做同样的事情,但是将url作为命名参数传递给视图,请使用r'^(?P<url>.*)/$'

答案 1 :(得分:0)

语句如果在数据库中找到合适的静态页面,似乎你的静态页面不是很静态,所以,你要么通过urls.py传递链接(就像你现在一样),或者从数据库中提取这些页面,将它们放在一个目录中,并将该目录配置为一个用于提供静态文件的目录