webapp2 - 如何反转模板中的 URL?

发布于 2024-12-27 00:35:15 字数 664 浏览 2 评论 0原文

我从 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() 但是 没有帮助。

多谢!

I'm starting with webapp2. My english is not very good, so i'll use an
example to explain my problem:
Suppose i'm building an application that will handle cars information.

I've these handlers:

  • ViewHandler: will display a view for a single car, with all of its
    information (engine, year, brand, model, etc..)
  • ListHandler: will display all the cars in the application, with a
    link to the view page.

The problem is that i can't build that link to the single view.

I could do this in the template:

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

but don't like that (where's the DRY principle after all?)
I was wondering if there's some way to do it similar to django,
resolving the URL in the template, like this:

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

Maybe it's not in the template. I've tryed webapp2.url_for() but
didn't help.

Thanks a lot!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

山田美奈子 2025-01-03 00:35:15

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')

webapp2.uri_for() is your best bet, but you must use it in combination with named routing. You can read more about webapp2 routing in combination with uri_for here:
http://webapp-improved.appspot.com/guide/routing.html

Here's an example from the above article of how it might look:

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')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文