Справочная шаблонная переменная в выражении Jinja

У меня есть маршрут, определенный следующим образом:

@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>

Что бросает a jinja2.TemplateSyntaxError: expected token ':' got }

Может ли кто-нибудь предложить, как получить {{ name }}, который появляется в шаблоне, в url_for(), чтобы при щелчке я вызывал правильный app.route?

Ответ 1

Все внутри {{ ... }} - это Python-подобное выражение. Вам не нужно использовать другой {{ ... }} внутри, чтобы ссылаться на переменные.

Отбросьте дополнительные скобки:

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

(Обратите внимание, что функция url_for() принимает имя конечной точки, а не путь к URL, имя по умолчанию соответствует имени функции moremagic в вашем примере).