Reference template variable within Jinja expression
I have a route defined like this:
@app.route('/magic/<filename>')
def moremagic(filename):
pass
And now in a template I want to call that route using url_for()
like so:
<h1>you uploaded {{ name }}<h1>
<a href="{{ url_for('/magic/<filename>') }}">Click to see magic happen</a>
I have tried:
<a href="{{ url_for('/magic', filename={{ name }}) }}">Click to see magic happen</a>
That throws a jinja2.TemplateSyntaxError: expected token ':' got }
Can anyone suggest how to get the {{ name }}
that appears in the template into the url_for()
so that when I click I call the correct app.route
?
Solution 1:
Everything inside the {{ ... }}
is a Python-like expression. You don't need to use another {{ ... }}
inside that to reference variables.
Drop the extra brackets:
<h1>you uploaded {{ name }}<h1>
<a href="{{ url_for('moremagic', filename=name) }}">Click to see magic happen</a>
(Note that the url_for()
function takes the endpoint name, not a URL path; the name defaults to the name of the function, moremagic
in your example).