How do I make a trailing slash optional with webapp2?

后端 未结 9 829
感情败类
感情败类 2021-02-12 15:30

I\'m using the new webapp2 (now the default webapp in 1.6), and I haven\'t been able to figure out how to make the trailing slash optional in code like this:

web         


        
相关标签:
9条回答
  • 2021-02-12 16:26

    This works for me and is very simple. It uses the template format for URI routing in the webapp2 Route class. Trailing slash in this example is optional with no redirection:

    webapp2.Route('/your_url<:/?>', PageHandler)
    

    Everything after the colon between the chevrons is considered to be a regex: <:regex>

    0 讨论(0)
  • 2021-02-12 16:28

    I don't like the RedirectRoute class because it causes an unnecessary HTTP Redirect.
    Based on the documentation for webapp2 Route class, here is a more detailed answer in this webapp2.Route with optional leading part thread.

    Short Answer

    My route patterns works for the following URLs.

    1. /
    2. /feed
    3. /feed/
    4. /feed/create
    5. /feed/create/
    6. /feed/edit/{entity_id}
    SITE_URLS = [
        webapp2.Route(r'/', handler=HomePageHandler, name='route-home'),
    
        webapp2.Route(r'/feed/<:(create/?)|edit/><entity_id:(\d*)>',
            handler=MyFeedHandler,
            name='route-entity-create-or-edit'),
    
        webapp2.SimpleRoute(r'/feed/?',
            handler=MyFeedListHandler,
            name='route-entity-list'),
    ]
    

    Hope it helps :-)

    0 讨论(0)
  • 2021-02-12 16:30

    Here's how I handle these routes.

    from webapp2 import Route
    from webapp2_extras.routes import PathPrefixRoute
    import handlers
    
    urls = [
      Route('/foo<:/?>', handlers.Foo),
      Route('/bars', handlers.BarList),
      PathPrefixRoute('/bar', [
        Route('/', handlers.BarList),
        Route('/<bar_id:\w+><:/?>', handlers.Bar),
      ]),
    ]
    ...
    

    It's important to note that your handlers will need to define *args and **kwargs to deal with the potential trailing slash, which gets sent to them as an argument using this method.

    class Bar(webapp2.RequestHandler):
    
      def get(bar_id, *args, **kwargs):
        # Lookup and render this Bar using bar_id.
        ...
    
    0 讨论(0)
提交回复
热议问题