【问题标题】:webapp2.Route with optional trailing parameters带有可选尾随参数的 webapp2.Route
【发布时间】:2015-11-14 18:47:52
【问题描述】:

我正在尝试路由以下网址,但如果 name_code 为空白,则会出现问题。
(name_code 是可选的)

类 handler_WebSite_Page(BaseRequestHandler):
def get(self, product, name, name_code):
logging.info('' + 产品)
logging.info('' + 名称)
如果(名称代码):
logging.info('->' + name_code)
其他:
通过


app = webapp2.WSGIApplication([ webapp2.Route("/web/product//", handler_WebSite_Page)
], config=app_config, debug=True)


我希望所有这些 URI 都转到同一个地方 (handler_WebSite_Page):

mysite.com/web/product
mysite.com/web/product/
mysite.com/web/product/name1
mysite.com/web/product/name2/
mysite.com/web/product/name3/name_code5
mysite.com/web/product/name4/name_code6/

仅供参考:如果 name_code 未通过,我会收到错误消息。 谢谢。

【问题讨论】:

    标签: python-2.7 google-app-engine webapp2


    【解决方案1】:

    您可以为每个要匹配的模式创建一个路由,并让它们指向同一个处理程序。使用 webapp2 RedirectRoute,您可以添加 strict_slash 以将 /web/product/ 重定向到 /web/product。 https://webapp-improved.appspot.com/api/webapp2_extras/routes.html

    RedirectRoute('/web/product', handlers.handler_WebSite_Page, name='product', strict_slash=True),
    RedirectRoute('/web/product/<name>', handlers.handler_WebSite_Page, name='product_name', strict_slash=True),
    RedirectRoute('/web/product/<name>/<name_code>', handlers.handler_WebSite_Page, name='product_name_code', strict_slash=True)
    

    为处理程序中的字段设置默认值。我删除了产品变量,因为您没有将其显示为路线值之一。

    class handler_WebSite_Page(BaseRequestHandler):
        def get(self, name='', name_code=''):
            logging.info('name=' + name)
            if (name_code):
                logging.info('->' + name_code)
                self.response.out.write('has name_code')
            else:
                self.response.out.write('no name_code')
    

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 2014-06-08
      • 2015-01-28
      • 1970-01-01
      • 2017-05-02
      • 2016-05-23
      • 2012-02-08
      • 1970-01-01
      • 2021-02-28
      相关资源
      最近更新 更多