V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
bigdude
V2EX  ›  问与答

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

  •  
  •   bigdude · 2013-05-06 17:49:30 +08:00 · 4322 次点击
    这是一个创建于 4226 天前的主题,其中的信息可能已经有所发展或是发生改变。
    /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报错缺少参数
    5 条回复    1970-01-01 08:00:00 +08:00
    felinx
        1
    felinx  
       2013-05-06 17:56:55 +08:00
    在前面再加一条
    routes = [(r'/books', BookHandler)]
    felinx
        2
    felinx  
       2013-05-06 18:00:52 +08:00
    变成这样的 routes = [(r'/books', BookHandler),(r'/books/(\d+)', BookHandler)]
    bigdude
        3
    bigdude  
    OP
       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
        4
    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
        5
    bigdude  
    OP
       2013-05-06 18:45:30 +08:00
    @felinx
    试了一下,添加了@tornado.web.removeslash,总是404,谷歌到了另外一个帖子http://www.v2ex.com/t/56486,原来是路由的正则不对,

    将上面的正则 /book 改成 /books/?就行了,再次感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2476 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:16 · PVG 10:16 · LAX 18:16 · JFK 21:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.