我试图更新我的webapp2路由器,在某些情况下将我带到另一个处理程序,这就是我所拥有的:
地址:" * .com / blog / post?action = edit& id = fl2j3r0udflj3"
为了保持简单,我想在/ blog / post上匹配?action = edit
我有这个:
app = webapp2.WSGIApplication([
('/',Redirect),
(r'/blog/post?(\S+)', blog.EditPost),
('/blog/post', NewPost),
....
不起作用。
我尝试了几种不同的东西,比如
什么都没有用。有什么想法吗?
答案 0 :(得分:1)
tl; dr:如果你想维护你的网址结构,你的'/ blog / post'处理程序将需要根据状态参数及其值进一步调度。
这是其中一种情况之一,在谈论URL时,先了解“路径”的含义是有帮助的。具体而言,该参数不是路径的一部分。
通过深入研究SDK源代码也可以解决这个问题,目的是回答“在匹配路由时考虑URL的哪一部分?”的问题。
webapp2
在webob
之上提供了功能。 webapp2.WSGIApplication
为传递给webapp2.SimpleRoute
构造函数的路由构建WSGIApplication
列表。 SimpleRoute
“匹配”基于request.path
,这是webob.Request
(webapp2.Request
子类)提供的请求中的属性。 path
属性以
@property
def path(self):
"""The path of the request, without host or query string"""
最终意味着查询字符串不能通过路由匹配。 (您可以深入挖掘代码以确认。)