我无法使用trailing_slash工具。我玩过 trailing_slash工具的选项似乎没有任何效果。 我使用的是CherryPy 3.2.2和Routes 1.13。我想要一个 尾随斜线添加。调试输出中没有错误。
如果我去127.0.0.1:8080/blog/它可行,但是如果我去的话 到127.0.0.1:8080/blog它没有。
我的配置是:
conf = {
'/': {
'request.dispatch': setup_routes(),
# This trailing slash stuff has no effect :(
'tools.trailing_slash.on': True,
'tools.trailing_slash.missing': True,
'tools.trailing_slash.status': 301,
},
'/static': {
'tools.staticdir.on': True,
'tools.staticdir.root': os.path.dirname(os.path.abspath(__file__)),
'tools.staticdir.dir': 'static'
}
}
示例路线是:
routes = [["blog_index", "/blog/", {'controller': BlogController(), 'action': 'index','entry_id': 'index'}],]
有人能看出我做错了什么吗?有没有错误或缺乏 基本文件? trailing_slash工具是否适用于Routes Dispatcher?
答案 0 :(得分:1)
尾部斜杠工具不适用于Routes Dispatcher。尾部斜杠工具期望无论选择何种调度程序,都会将cherrypy.request.is_index
设置为True或False,看起来RoutesDispatcher
类根本不执行。因此,is_index
保留为None,并且尾部斜杠工具不执行任何操作。对于具有良好Routes知识的人来说,可能有可能在CherryPy代码库中修复它,或者编写自己的调度程序来设置is_index,或者尝试编写另一个修复is_index的工具。
答案 1 :(得分:0)
路由中没有“索引”的概念,因为您可以定义同一路径的2个连接,一个带有尾部斜杠,另一个没有,并将它们连接到2个完全不同的控制器和/或操作。你不会在现实生活中这样做,但它可能在Routes中,所以真的没有一个好方法来改变trailing_slash工具来解决这个问题。
恕我直言,trailing_slash工具有点缺乏,它可能应该提升到位于默认WSGI中间管道前面的WSGI中间件的水平,就像现在正在使用CherryRy的InternalRedirect中间件一样。例如,如果您在script_name下安装了RouteDispatcher,则无法将trailing_slash工具放在任何位置以使CP在script_name之后放置一个尾部斜杠,因为Routes中的所有路径都必须以斜杠开头,并且它将抛出一个如果在尝试匹配时path_info是空字符串,则为RoutesException。
答案 2 :(得分:0)
很长一段时间问道,但这是一种让它发挥作用的方法:
def index(index=True):
cherrypy.request.is_index = index
cherrypy.tools.index = cherrypy.Tool('on_start_resource', index)
config = {
...
'tools.trailing_slash.status': 307,
'tools.index.on': True,
...
}