WebApp2 - ¿Cómo revertir la URL en las plantillas?
-
28-10-2019 - |
Pregunta
Estoy comenzando con WebApp2. Mi inglés no es muy bueno, así que usaré un ejemplo para explicar mi problema: supongo que estoy construyendo una aplicación que manejará la información de los automóviles.
Tengo estos manejadores:
- ViewHandler: mostrará una vista para un solo automóvil, con toda su información (motor, año, marca, modelo, etc.)
- Listhandler: mostrará todos los autos en la aplicación, con un enlace a la página Ver.
El problema es que no puedo construir ese enlace a la vista única.
Podría hacer esto en la plantilla:
<ul>
<li><a href='/cars/view/{{car.id}}'>{{car.model}}</a></li>
</ul>
Pero no me gusta (¿dónde está el principio seco después de todo?) Me preguntaba si hay alguna forma de hacerlo similar a Django, resolviendo la URL en la plantilla, como esta:
<ul>
<li><a href='{% url cars.view car.id}'>{{car.model}}</a></li>
</ul>
Tal vez no está en la plantilla. He probado webApp2.URL_FOR () pero no ayudó.
¡Muchas gracias!
Solución
WebApp2.uri_for () es su mejor opción, pero debe usarla en combinación con enrutamiento con nombre. Puede leer más sobre el enrutamiento WebApp2 en combinación con Uri_For aquí:http://webapp-improved.appspot.com/guide/routing.html
Aquí hay un ejemplo del artículo anterior de cómo podría verse:
app = webapp2.WSGIApplication([
webapp2.Route('/', handler='handlers.HomeHandler', name='home'),
webapp2.Route('/wiki', handler=WikiHandler, name='wiki'),
webapp2.Route('/wiki/<page>', handler=WikiHandler, name='wiki-page'),
])
# /
uri = uri_for('home')
# http://localhost:8080/
uri = uri_for('home', _full=True)
# /wiki
uri = uri_for('wiki')
# http://localhost:8080/wiki
uri = uri_for('wiki', _full=True)
# http://localhost:8080/wiki#my-heading
uri = uri_for('wiki', _full=True, _fragment='my-heading')
# /wiki/my-first-page
uri = uri_for('wiki-page', page='my-first-page')
# /wiki/my-first-page?format=atom
uri = uri_for('wiki-page', page='my-first-page', format='atom')