tornado中如何设置URL的默认参数?

2013-05-06 17:49:30 +08:00
 bigdude
/books/1 对应BookHandler,页码默认是1,在routes中定义URL映射

routes = [(r'/books/(\d+)', BookHandler)]

BookHanlder中

class BookHandler(tornado.web.RequestHandler):
def get(self, page=1):
pass

现在想让访问/books的链接默认为第一页即/books/1该如何设置?
直接访问/books报错缺少参数
4318 次点击
所在节点    问与答
5 条回复
felinx
2013-05-06 17:56:55 +08:00
在前面再加一条
routes = [(r'/books', BookHandler)]
felinx
2013-05-06 18:00:52 +08:00
变成这样的 routes = [(r'/books', BookHandler),(r'/books/(\d+)', BookHandler)]
bigdude
2013-05-06 18:01:59 +08:00
@felinx 谢,自己搞了下,总结

在handler中要检查参数,
page = page if page else 1

在routes中要添加
routes.extend((r'/books', BookHandler))

这样访问
/books
/books/
/books/1
都正常显示第一页内容
felinx
2013-05-06 18:10:22 +08:00
你的page=1这种默然参数的也可以的,不用page = page if page else 1

另外
/books
/books/

这两种url建议统一为一种,若带/的都自动跳到不带/的,即:
/books/跳转到/books
反之亦然。

tornado.web.removeslash
tornado.web.addslash

是做这个用的,统一处理的话可以参考下面prepare里面的_remove_slash:
https://bitbucket.org/felinx/poweredsites/src/6040f8cf119ca530c9359275f3beaf63d5fc441d/poweredsites/libs/handler.py?at=default


def prepare(self):
self._prepare_context()
self._remove_slash()
bigdude
2013-05-06 18:45:30 +08:00
@felinx
试了一下,添加了@tornado.web.removeslash,总是404,谷歌到了另外一个帖子http://www.v2ex.com/t/56486,原来是路由的正则不对,

将上面的正则 /book 改成 /books/?就行了,再次感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/67916

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX