Why use Flask’s url_for?

I’d like to know the reasoning behind using url_for to generate links in templates and the application code.

What do I gain by doing this:

<link rel="stylesheet" href="{{ url_for('static', filename='css/main.css') }}" rel="nofollow noreferrer noopener">

and this:

<ul>
    <li><a href="{{ url_for('index') }}" rel="nofollow noreferrer noopener">Home</a></li> 
    <li><a href="{{ url_for('about') }}" rel="nofollow noreferrer noopener">About Us</a></li>
    <li><a href="{{ url_for('contact') }}" rel="nofollow noreferrer noopener">Contact</a></li>
</ul>

Instead of hard coding the paths?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

From Flask’s documentation,

flask.url_for(endpoint, **values)

Generates a URL to the given endpoint with the method provided.

Variable arguments that are unknown to the target endpoint are
appended to the generated URL as query arguments. If the value of a
query argument is None, the whole pair is skipped. In case blueprints
are active you can shortcut references to the same blueprint by
prefixing the local endpoint with a dot (.).

Now, instead of specifying static urls to reach an endpoint, you can use url_for which does a reverse match for the endpoint. It is particularly useful when you have arguments which you might want to specify at runtime.

{{ url_for('events', user_id=user.id, year=2013) }}
/events/1388224/2013

The paths generated are always absolute (start with a “/”) so that they work regardless of the current URL. They also take into account if the application is mounted at a prefix rather than the root (like “/myapp/events/1/2013”).

The _external=True argument can be used to generate URLs with the server name so that they can be used externally, such as in email messages.

View your events: {{ url_for("events", user_id=user.id, year=2013, _external=True) }}


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x