Estoy escribiendo una aplicación webapp2 y estoy tratando de descubrir cómo anidar asignaciones de URL. La aplicación se divide en varios paquetes, y me gustaría que cada paquete pueda especificar sus propias asignaciones de URL de forma similar a como lo hace Django con su directiva include(). Copiando de la documentación de Django, esto se vería así:
urlpatterns = [ # ... snip ... url(r'^community/', include('django_website.aggregator.urls')), url(r'^contact/', include('django_website.contact.urls')), # ... snip ... ]¿Debería especificarse esto en app.yaml, o hay alguna forma de especificar la inclusión en webapp2.WSGIApplication([])
Puede hacerlo en webapp2.WSGIApplication . Echa un vistazo a los documentos de PathPrefixRoute . PathPrefixRoute toma dos argumentos: el prefijo de ruta como una cadena y una lista de rutas. La cadena de prefijo de la ruta sería 'community/' o contact/ , según su pregunta. Para la lista de rutas, simplemente guarde una lista de rutas (sin el prefijo de ruta) en cada paquete al que desee enrutar. Entonces, digamos que tiene un package.contact y un package.community . Podría incluir un urls.py para cada uno de ellos que se vea así:
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'), ... ]Luego, en tu app.py, podrías hacer esto:
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.HandlerOnePodrías ser más creativo para hacerlo más agradable estéticamente o más parecido a Django, pero te haces una idea. Con PathPrefixRoute, todo lo que necesita es una lista de rutas de sus paquetes para conectarlas al enrutamiento de su aplicación.