webapp2 - Как поменять URL в шаблонах? - PullRequest
5 голосов
/ 13 января 2012

Я начинаю с webapp2.Мой английский не очень хорош, поэтому я буду использовать пример, чтобы объяснить мою проблему: предположим, я создаю приложение, которое будет обрабатывать информацию об автомобилях.

У меня есть следующие обработчики:

  • ViewHandler: отобразит представление для одного автомобиля со всей его информацией (двигатель, год выпуска, марка, модель и т. Д.)
  • ListHandler: отобразит все автомобили в приложении со ссылкой на страницу просмотра.

Проблема в том, что я не могу создать эту ссылку на один вид.

Я мог бы сделать это в шаблоне:

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

, но мне это не нравится (где же в конце концов принцип СУХОГО?) Мне было интересно, есть ли способ сделать это похожим наdjango, разрешив URL в шаблоне, вот так:

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

Возможно, его нет в шаблоне.Я пробовал webapp2.url_for (), но не помогло.

Большое спасибо!

1 Ответ

8 голосов
/ 17 января 2012

webapp2.uri_for () - ваш лучший выбор, но вы должны использовать его в сочетании с именованной маршрутизацией. Вы можете прочитать больше о маршрутизации webapp2 в сочетании с uri_for здесь: http://webapp -improved.appspot.com / гид / 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')
...