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')
我正在尝试路由以下 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')