如何在webapp2.WSGIApplication中嵌套url映射

时间:2017-04-28 20:16:51

标签: django webapp2

我正在编写一个webapp2应用程序,并试图弄清楚如何嵌套网址映射。该应用程序分为几个包,我希望每个包能够指定它自己的url映射,类似于Django使用它的include()指令的方式。从Django文档中复制,如下所示:

cv::Mat invert_image(cv::Mat const& input)
{
    return 255 - input;
}

这需要在app.yaml中指定,还是有办法在webapp2.WSGIApplication([])中指定包含

1 个答案:

答案 0 :(得分:1)

您可以在webapp2.WSGIApplication中执行此操作。看看docs for PathPrefixRoute。 PathPrefixRoute有两个参数:路径前缀作为字符串,以及路由列表。根据您的问题,路径前缀字符串为'community/'contact/。对于路由列表,只需在要路由到的每个包中保存路由列表(不带路径前缀)。因此,假设您有一个package.contact和一个package.community。您可以为每个包含urls.py的内容包含以下内容:

import webapp2
from handlers import HandlerOne, HandlerTwo, etc.
ROUTE_LIST = [
    webapp2.Route('/path_one', HandlerOne, 'name-for-route-one'),
    webapp2.Route('/path_two', HandlerTwo, 'name-for-route-two'),
    ...
]

然后在你的app.py中,你可以这样做:

from package.contact import urls as contact_urls
from package.community import urls as community_urls
from webapp2_extras.routes import PathPrefixRoute

routes = [
    webapp2.Route('/', RegularHandler, 'route-name'),
    # ... other normal routes ...
    PathPrefixRoute('/contact', contact_urls.ROUTE_LIST),
    PathPrefixRoute('/community', community_urls.ROUTE_LIST),
    # ... other routes ...
]
app = WSGIApplication(routes)

# now the url '/contact/path-one' will route to package.contact.handlers.HandlerOne

你可以获得更多的创意,使它更美观或更像Django,但你得到的图片。使用PathPrefixRoute,您只需要一个包裹路由列表,将它们插入您的应用程序路由。