I use Flask to write web applications, and 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') }}">
and this:
<ul>
<li><a href="{{ url_for('index') }}">Home</a></li>
<li><a href="{{ url_for('about') }}">About Us</a></li>
<li><a href="{{ url_for('contact') }}">Contact</a></li>
</ul>
Instead of hard coding the paths?
From flask 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 (.).
This will reference the index function local to the current blueprint:
url_for('.index')
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.
Example
{{ url_for('static', filename='css/main.css') }}
You could have filename='...')
dynamically computed at runtime.
Extending it further,
external=True
option enables redirection