5

如果我构建一个 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'}) }}

现有的例子似乎已经过时了——至少我无法让它们工作。我错过了什么?

4

2 回答 2

7

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

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

You can try the above, Jinja is expecting the named parameter you defined your handler.

于 2013-05-06T09:25:56.843 回答
0

我认为{{ url_for('invoice', 123) }}应该工作。

于 2013-05-06T09:10:44.937 回答