Flask-JSGlue helps hook up your Flask application nicely with the front end.


Install the extension with one of the following commands:

$ easy_install Flask-JSGlue

Or alternatively if you have pip installed:

$ pip install Flask-JSGlue

Set Up

Glue codes are generated and managed through a JSGlue instance:

from flask import Flask
from flask_jsglue import JSGlue

app = Flask(__name__)
jsglue = JSGlue(app)

You may also set up your JSGlue instance later at configuration time using init_app() method:

jsglue = JSGlue()

app = Flask(__name__)

Invoking url_for() at the Front-end Side

url_for() is commonly used throughout the source code to prevent the application from being broken when routes are changed. Considering the fact that designing services in a RESTful manner is highly recommended nowadays, it’s frustrating that you can’t use url_for() at the front-end side – especially when the routes are being frequently changed due to acitve development. Flask-JSGlue provides a client-side url_for(), which makes source codes dynamic and more charming.

In <head>:

{{ JSGlue.include() }}

In your Javascript source code:


Flask.url_for("static", {"filename": "jquery.min.js"})

Flask.url_for("api.hello_world", {"param1": 1, "param2": "text"})

Flask.url_for("api.external_link", {"_external": true, "_scheme": "https", "_anchor": "main"})


Since it’s being done at the front-end side, passing objects other than primitive types will raise an exception.


The Flask documentation suggests that you just add a script tag to your webpage that has URLs. Perhaps you’re wondering if Flask-JSGlue’s approach is the right way of doing it, since it seems like the Flask documentation suggests otherwise. The answer is yes. Actually, it’s the same way as what the documentation suggests. It’s just a more sophisticated way of doing it than just adding a raw script tag.