webapp2 - 如何在模板中反向 URL?
我刚开始学习webapp2。我的英语不太好,所以我用一个例子来解释我的问题:
假设我在制作一个处理汽车信息的应用程序。
我有这些处理器:
- ViewHandler:这个处理器会显示单辆车的详细信息,包括发动机、年份、品牌、型号等等。
- ListHandler:这个处理器会显示应用程序中所有的汽车,并提供一个链接到单辆车的详细信息页面。
问题是我不知道怎么建立那个链接到单辆车的详细信息页面。
我可以在模板中这样做:
<ul>
<li><a href='/cars/view/{{car.id}}'>{{car.model}}</a></li>
</ul>
但我不喜欢这样(毕竟DRY原则在哪里呢?)我在想有没有什么方法可以像django那样,在模板中解析URL,像这样:
<ul>
<li><a href='{% url cars.view car.id}'>{{car.model}}</a></li>
</ul>
也许这不是在模板中。我试过webapp2.url_for(),但没有帮助。
非常感谢!
1 个回答
8
webapp2.uri_for() 是你最好的选择,但你必须和命名路由一起使用。你可以在这里了解更多关于 webapp2 路由和 uri_for 的内容:http://webapp-improved.appspot.com/guide/routing.html
下面是来自上述文章的一个例子,看看它可能是什么样子的:
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')