我在urls.py中设置了一个通配符,如果在数据库中找到相应的页面,则加载一个简单的视图。但是这种方法的问题在于URL解析器将永远不会失败,这意味着APPEND_SLASH功能不会启动-我需要它。
我不想添加前缀来阻止它成为通配符。我知道flatpages使用404钩子而不是urls.py中的条目,我本来希望避免使用它,但我猜这个问题可能正是人们使用它的原因。
是否有任何解决此问题的方法,或者我应该放弃并使用flatpages?
我在urls.py中设置了一个通配符,如果在数据库中找到相应的页面,则加载一个简单的视图。但是这种方法的问题在于URL解析器将永远不会失败,这意味着APPEND_SLASH功能不会启动-我需要它。
我不想添加前缀来阻止它成为通配符。我知道flatpages使用404钩子而不是urls.py中的条目,我本来希望避免使用它,但我猜这个问题可能正是人们使用它的原因。
是否有任何解决此问题的方法,或者我应该放弃并使用flatpages?
请确保您的通配符URL模式末尾有一个斜杠,并且该模式是URLconf中的最后一个。如果通配符模式没有以斜杠结尾,则它将在中间件尝试添加斜杠之前匹配到杂散的URL。
例如,使用r'^.*/$'
而不是r'^.*'
作为您的最后一个模式。
要实现相同的效果,但将url作为命名参数传递给视图,请使用r'^(?P<url>.*)/$'
。
如果在数据库中找到了适当的静态页面,那么这个语句似乎表明你的静态页面并不是完全静态的。因此,你可以像现在一样通过urls.py传递链接,或者将这些页面从数据库中提取出来,放入一个目录中,并将该目录配置为用于提供静态文件的目录。
r'^(?P<url>.*)/$'
会导致添加重复的尾部斜杠。从正则表达式中省略斜杠(保留r'^(?P<url>.*)$'
)可以解决这个问题。 - Micah Walter