如何在 webapp2.WSGIApplication 中嵌套 url 映射
How do you nest url mapping in webapp2.WSGIApplication
我正在编写一个 webapp2 应用程序,并试图弄清楚如何嵌套 url 映射。该应用程序被分成几个包,我希望每个包都能够指定它自己的 url 映射,类似于 Django 使用它的 include() 指令的方式。从 Django 文档复制这看起来像:
urlpatterns = [
# ... snip ...
url(r'^community/', include('django_website.aggregator.urls')),
url(r'^contact/', include('django_website.contact.urls')),
# ... snip ...
]
这是否需要在 app.yaml 中指定,或者有没有办法在 webapp2.WSGIApplication([])
中指定包含
您可以在 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,您只需要一个包中的路由列表即可将它们插入您的应用程序路由。
我正在编写一个 webapp2 应用程序,并试图弄清楚如何嵌套 url 映射。该应用程序被分成几个包,我希望每个包都能够指定它自己的 url 映射,类似于 Django 使用它的 include() 指令的方式。从 Django 文档复制这看起来像:
urlpatterns = [
# ... snip ...
url(r'^community/', include('django_website.aggregator.urls')),
url(r'^contact/', include('django_website.contact.urls')),
# ... snip ...
]
这是否需要在 app.yaml 中指定,或者有没有办法在 webapp2.WSGIApplication([])
中指定包含您可以在 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,您只需要一个包中的路由列表即可将它们插入您的应用程序路由。