2012-01-13 36 views
5

我以webapp2开头。我的英语不太好,所以我会用一个 的例子来解释我的问题: 假设我正在构建一个处理汽车信息的应用程序。webapp2 - 如何在模板中反向URL?

我有这些处理程序:

  • 的ViewHandler:会显示一个车的图,它的所有 信息(发动机,年份,品牌,型号等。)
  • ListHandler :将显示应用程序中的所有汽车,并且链接到查看页面的链接为 。

问题是我无法建立到单个视图的链接。

我可以在模板中做到这一点:

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

,但不喜欢这样的 我想知道是否有某种方式来做到这一点类似于Django的, (哪来毕竟DRY原则?)解析模板中的URL,如下所示:

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

也许它不在模板中。我试过webapp2.url_for(),但 没有帮助。

非常感谢!

+2

http://webapp-improved.appspot.com/guide/routing.html

下面是它可能会如何看待上述文章的例子: http://stackoverflow.com/questions/7081250/webapp2-jinja2-how-can-i-get-uri-for-working-in-jinja2-views – gmunkhbaatarmn 2012-01-14 04:29:15

+0

我不使用忍者,但我会看看也许会改变。谢谢。 – santiagobasulto 2012-01-14 14:47:12

回答

8

webapp2.uri_for()是你最好的选择,但你必须结合使用命名路由。你可以在这里阅读更多关于组合we​​bapp2的路由与uri_for:如果您在使用webapp2的+ Jinja2的公司已经在计算器回答

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

文档链接已更改为http://webapp2.readthedocs.io/en/latest/guide/routing.html – igniteflow 2017-03-15 15:47:35