webapp2.Route包含可选的尾随参数

时间:2015-08-20 23:08:09

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

我正在尝试路由以下网址,但如果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,我会收到错误消息。 谢谢。

1 个答案:

答案 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')