2012-01-13 17 views
5

Estoy empezando con webapp2. Mi inglés no es muy bueno, entonces usaré un ejemplo de para explicar mi problema: Supongamos que estoy creando una aplicación que manejará la información de los autos.webapp2 - ¿Cómo invertir URL en plantillas?

tengo estos controladores:

  • ViewHandler: se mostrará una vista para un solo coche, con toda su información (motor, año, marca, modelo, etc ..)
  • ListHandler : mostrará todos los automóviles en la aplicación, con un enlace a la página de visualización.

El problema es que no puedo construir ese enlace a la vista única.

que podía hacer esto en la plantilla:

<ul> 
    <li><a href='/cars/view/{{car.id}}'>{{car.model}}</a></li> 
</ul> 

pero no me gusta eso Me preguntaba si hay alguna manera de hacerlo similar a Django, (¿dónde está el principio DRY después de todo?) resolviendo la URL en la plantilla, así:

<ul> 
    <li><a href='{% url cars.view car.id}'>{{car.model}}</a></li> 
</ul> 

Quizás no está en la plantilla. He probado webapp2.url_for() pero no me ayudó.

¡Muchas gracias!

+2

Si usando webapp2 + Jinja2 su ya responder en stackoverflow: http://stackoverflow.com/questions/7081250/webapp2-jinja2-how-can-i-get-uri-for-working-in-jinja2-views – gmunkhbaatarmn

+0

No estoy usando jinja, pero voy a echar un vistazo y tal vez cambiar Gracias. – santiagobasulto

Respuesta

8

webapp2.uri_for() es su mejor opción, pero debe usarlo en combinación con el enrutamiento con nombre. Puede leer más acerca del enrutamiento webapp2 en combinación con uri_for aquí: http://webapp-improved.appspot.com/guide/routing.html

He aquí un ejemplo del artículo de más arriba de lo que podría parecer:

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') 
+0

El enlace de documentos ha cambiado a http://webapp2.readthedocs.io/en/latest/guide/routing.html – igniteflow