如何使 webapp2 的尾部斜杠成为可选?
我正在使用新的 webapp2(现在是 1.6 中的默认 webapp),并且我无法弄清楚如何在这样的代码中使尾随斜杠可选:
webapp.Route('/feed', handler = feed)
我尝试过 /feed/?< /code>、
/feed/*
、/feed\/*
和 /feed\/?
,都无济于事。
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:
webapp.Route('/feed', handler = feed)
I've tried /feed/?
, /feed/*
, /feed\/*
and /feed\/?
, all to no avail.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
为了避免在同一页面创建重复的 URL:,您应该使用将 strict_slash 设置为 True 的 RedirectRoute 自动将 /feed/ 重定向到 /feed,如下所示:
阅读更多信息 http://webapp2.readthedocs.io/en/latest/api/webapp2_extras/routes.html
To avoid creating duplicate URL:s to the same page, you should use a RedirectRoute with strict_slash set to True to automatically redirect /feed/ to /feed, like this:
Read more at http://webapp2.readthedocs.io/en/latest/api/webapp2_extras/routes.html
我不喜欢
RedirectRoute
类,因为它会导致不必要的 HTTP 重定向。根据 webapp2 Route 类 的文档,这里是在此 webapp2.Route with optionalleading part 线程中有更详细的答案。
简短回答
我的路由模式适用于以下 URL。
希望有帮助:-)
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.
Hope it helps :-)
这是我处理这些路线的方法。
需要注意的是,您的处理程序需要定义
*args
和**kwargs
来处理潜在的尾部斜杠,使用此方法将其作为参数发送给它们。Here's how I handle these routes.
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.webapp2.Route
模板不是正则表达式,您的值正在使用re.escape
进行转义。您可以使用提供正则表达式模板的旧样式规则:webapp2.Route
template is not a regular expressions and your value is being escaped withre.escape
. You can use old style rules which provides regular expression templates:这对我有用并且非常简单。它使用 webapp2 Route class。此示例中的尾部斜杠是可选的,没有重定向:
V 形之间的冒号之后的所有内容都被视为正则表达式:
<:regex>
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:
Everything after the colon between the chevrons is considered to be a regex:
<:regex>
如果您不想使用重定向(而且您可能不想),您可以重写
Route.match()
:If you don't want to use redirects (and you probably don't), you can override
Route.match()
:我正在寻找一种方法,使 PathPrefixRoute 块根部的尾部斜杠可选。
如果有,请说:
您将能够访问
/admin/
,但不能访问/admin
。由于我找不到更好的解决方案,因此我将
redirect_to_name
添加到了额外的路由中,例如:我对解决此问题的更好解决方案感兴趣。
我应该采用 Stun 的解决方案而不使用 RedirectRoute 吗?
I was looking for a way to make the trailling slash on the root of a PathPrefixRoute block optional.
If you have, say:
You will be able to access
/admin/
, but not/admin
.Since I couldn't find any better solution, I've added a
redirect_to_name
to an extra route, like:I'm interested in better solutions to this problem.
Should I go for Stun's solution and simply not use RedirectRoute?
我想出了一种古怪的方法。我定义了以下类:
然后我设置了如下所示的路线:
如果您确实选择走这条路线,那么显然您可以对其进行改进,使其与其他类型的 BaseRoute 对象更加灵活。
I came up with a sort of hacky way. I define the following class:
Then I set up my routes like the following:
If you do choose to go this route, you can obviously improve upon it to be more flexible with other types of BaseRoute objects.
我对 webapp2 不熟悉,但如果第一个参数是正则表达式,请尝试:
I am not familiar with webapp2, but if the first parameter is a regular expression, try: