Django抓取所有URL而不破坏APPEND_SLASH

ned*_*ned 27 django

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

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

任何方式解决这个问题或我应该让步并使用flatpages?

Art*_*ert 61

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

例如,使用r'^.*/$'而不是r'^.*'作为最后一个模式.

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

  • 唯一的缺点是,对于所有网址,如果没有尾随斜杠,都将不再存在 (2认同)
  • 它确实捕获没有结尾斜杠@JadS的URL,因为中间件会将一个附加到没有URL的任何URL上,_before_会将其与该模式进行比较。如果您的设置中的APPEND_SLASH = False,那么您很正确地认为此解决方案不会解决这些问题。不过,OP专门针对此设置。 (2认同)