在Google App Engine的jinja2中,我如何(轻松)根据带参数的路由名称构建URL?

时间:2013-05-06 08:11:40

标签: google-app-engine jinja2

如果我按如下方式构建jinja环境:

jinja_environment = jinja2.Environment (
    loader=jinja2.FileSystemLoader ((os.path.dirname (__file__), 'templates')), extensions=[])
jinja_environment.globals['url_for'] = webapp2.uri_for

在我的模板中,当路由没有定义任何参数时,我可以从路由名称构建简单的URL:

{{ url_for('user_home') }}

但是,当路由包含由/invoice/<:\d+>等字符串定义的参数时,我无法传递任何参数。通过以下所有方式调用它失败,使用KeyError "Missing argument "0" to build URI."

{{ url_for('invoice') }}
{{ url_for('invoice', args=['123']) }}
{{ url_for('invoice', kwargs={'__0__':'123'}) }}
{{ url_for('invoice',_request=None, args=['123'],kwargs={'__0__':'123'}) }}

现有的例子似乎已经过时了 - 至少我还没有能够让它们发挥作用。我错过了什么?

2 个答案:

答案 0 :(得分:7)

Route('/invoice/<invoice_id>/', handler=invoice_handler, invoice_id='something')

{{ url_for('invoice', invoice_id=123) }}

您可以尝试以上操作,Jinja期待您定义处理程序的命名参数。

答案 1 :(得分:0)

我认为只有{{ url_for('invoice', 123) }}才有效。