Jinja 表达式中的引用模板变量

Reference template variable within Jinja expression

我有这样定义的路线:

@app.route('/magic/<filename>')
def moremagic(filename):
    pass

现在在模板中,我想使用 url_for() 调用该路由,如下所示:

<h1>you uploaded {{ name }}<h1>
<a href="{{ url_for('/magic/<filename>') }}">Click to see magic happen</a>

我试过:

<a href="{{ url_for('/magic', filename={{ name }}) }}">Click to see magic happen</a>

这会引发 jinja2.TemplateSyntaxError: expected token ':' got }

谁能建议如何将模板中出现的 {{ name }} 放入 url_for() 中,以便在我单击时调用正确的 app.route

{{ ... }} 中的所有内容都是类似 Python 的表达式。您不需要在其中使用另一个 {{ ... }} 来引用变量。

删除多余的括号:

<h1>you uploaded {{ name }}<h1>
<a href="{{ url_for('moremagic', filename=name) }}">Click to see magic happen</a>

(请注意,url_for() 函数采用端点 name,而不是 URL 路径;名称默认为函数名称,moremagic 在你的例子中)。