webapp2 - 如何在模板中反向 URL?

5 投票
1 回答
2686 浏览
提问于 2025-04-17 10:10

我刚开始学习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')

撰写回答