Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why use Flask's url_for?

Tags:

python

flask

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?

like image 972
nothankyou Avatar asked Jul 02 '13 21:07

nothankyou


People also ask

What does Flask's url_for () do?

url_for in Flask is used for creating a URL to prevent the overhead of having to change URLs throughout an application (including in templates). Without url_for , if there is a change in the root URL of your app then you have to change it in every page where the link is present.

What is Mimetype in Flask?

Project description. Flask-Mime is Flask extension that enables applications to dispatch requests based on Accept header of it.

What does APP route mean?

App Routing means mapping the URLs to a specific function that will handle the logic for that URL. Modern web frameworks use more meaningful URLs to help users remember the URLs and make navigation simpler.


1 Answers

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) }}
like image 156
karthikr Avatar answered Sep 16 '22 14:09

karthikr