2012-01-13 22 views
5

Tôi bắt đầu với webapp2. Tiếng Anh của tôi không phải là rất tốt, vì vậy tôi sẽ sử dụng một ví dụ để giải thích vấn đề của tôi: Giả sử tôi đang xây dựng một ứng dụng sẽ xử lý thông tin ô tô.webapp2 - Cách đảo ngược URL trong các mẫu?

Tôi đã những xử lý:

  • ViewHandler: sẽ hiển thị một cái nhìn cho một chiếc xe duy nhất, với tất cả các thông tin của nó (động cơ, năm, thương hiệu, mô hình, vv ..)
  • ListHandler : sẽ hiển thị tất cả các ô tô trong ứng dụng, với liên kết đến trang xem.

Vấn đề là tôi không thể tạo liên kết đó cho chế độ xem duy nhất.

tôi có thể làm điều này trong mẫu:

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

nhưng không thích điều đó tôi đã tự hỏi nếu có một số cách để làm điều đó tương tự như Django, (nơi là nguyên tắc DRY sau khi tất cả?) giải quyết URL trong mẫu, như sau:

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

Có thể nó không có trong mẫu. Tôi đã thử webapp2.url_for() nhưng không giúp ích gì.

Cảm ơn rất nhiều!

+2

Nếu bạn sử dụng webapp2 + jinja2 mình đã trả lời trong stackoverflow: http://stackoverflow.com/questions/7081250/webapp2-jinja2-how-can-i-get-uri-for-working-in-jinja2-views – gmunkhbaatarmn

+0

Tôi không sử dụng jinja, nhưng tôi sẽ xem xét và có thể thay đổi. Cảm ơn. – santiagobasulto

Trả lời

8

webapp2.uri_for() là đặt cược tốt nhất của bạn, nhưng bạn phải sử dụng nó kết hợp với định tuyến được đặt tên. Bạn có thể đọc thêm về định tuyến webapp2 kết hợp với uri_for đây: http://webapp-improved.appspot.com/guide/routing.html

Dưới đây là một ví dụ từ bài viết ở trên của nó như thế nào có thể trông:

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

Liên kết Documents đã thay đổi thành http://webapp2.readthedocs.io/en/latest/guide/routing.html – igniteflow