Creating link to an url of Flask app in jinja2 template

I feel like you’re asking two questions here but I’ll take a shot…

For the posting url you’d do this:

<a href="{{ url_for("post_blueprint.get_post', year=year, month=month, title=title)}}">
    {{ title }}

To handle static files I’d highly suggest using an asset manager like Flask-Assets, but to do it with vanilla flask you do:

{{ url_for('static', filename="[filenameofstaticfile]") }}

If you’d like more information I highly suggest you read. and

Edit for using kwargs:

Just thought I’d be more thorough…

If you’d like to use url_for like this:

{{ url_for('post_blueprint.get_post', **post) }}

You have to change your view to something like this:

def get_all_posts():
    models = database_call_of_some_kind # This is assuming you use some kind of model
    posts = []
    for model in models:
        posts.append(dict(year=model.year, month=model.month, title=model.title))
    return render_template('p.html', posts=posts)

Then your template code can look like this:

{% for post in posts %}
    <a href="{{ url_for("post_blueprint.get_post', **post) }}">
        {{ post['title'] }}
{% endfor %}

At this point I would actually create a method on the model so you don’t have to turn it into a dict, but going that far is up to you :-).

Leave a Comment