我正在尝试路由以下网址,但如果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)
其他:
通过
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,我会收到错误消息。 谢谢。
答案 0 :(得分:3)
您可以为要匹配的每个模式创建路径,并让它们指向同一个处理程序。使用webapp2 RedirectRoute,您可以将strict_slash添加到redirect / web / product / to / 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')