2012-01-13 78 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