bigdude
V2EX  ›  问与答

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

  •  
  •   bigdude · May 6, 2013 · 4750 views
    This topic created in 4757 days ago, the information mentioned may be changed or developed.
    /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 replies    1970-01-01 08:00:00 +08:00
    felinx
        1
    felinx  
       May 6, 2013
    在前面再加一条
    routes = [(r'/books', BookHandler)]
    felinx
        2
    felinx  
       May 6, 2013
    变成这样的 routes = [(r'/books', BookHandler),(r'/books/(\d+)', BookHandler)]
    bigdude
        3
    bigdude  
    OP
       May 6, 2013
    @felinx 谢,自己搞了下,总结

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

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

    这样访问
    /books
    /books/
    /books/1
    都正常显示第一页内容
    felinx
        4
    felinx  
       May 6, 2013
    你的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
       May 6, 2013
    @felinx
    试了一下,添加了@tornado.web.removeslash,总是404,谷歌到了另外一个帖子http://www.sunp.eu.org/t/56486,原来是路由的正则不对,

    将上面的正则 /book 改成 /books/?就行了,再次感谢!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2979 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 04:41 · PVG 12:41 · LAX 21:41 · JFK 00:41
    ♥ Do have faith in what you're doing.