webapp2.Route 带有可选的尾随参数

webapp2.Route with optional trailing parameters

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

class handler_WebSite_Page(BaseRequestHandler):
    def get(self, product, name, name_code):
        logging.info('' + product)
        logging.info('' + name)
         if (name_code):
            logging.info('->' + name_code)
         else:
             pass


app = webapp2.WSGIApplication([ webapp2.Route("/web/product/< name >/< name_code >", 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 未通过,我会收到错误消息。 谢谢。

您可以为每个要匹配的模式创建一个路由,并让它们指向同一个处理程序。使用 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')