Bird
Raised Fist0
Flaskframework~5 mins

Serving JavaScript files in Flask

Choose your learning style10 modes available
Introduction

We serve JavaScript files so web pages can use scripts to add interactivity and dynamic features.

You want to add buttons that do things without reloading the page.
You need to run code in the browser to update content dynamically.
You want to separate your JavaScript code from HTML for cleaner structure.
You want to reuse the same JavaScript file on multiple pages.
You want the browser to cache JavaScript files for faster loading.
Syntax
Flask
from flask import Flask, send_from_directory

app = Flask(__name__)

@app.route('/js/<path:filename>')
def serve_js(filename):
    return send_from_directory('static/js', filename)

if __name__ == '__main__':
    app.run()

JavaScript files are usually placed in a folder like static/js.

The send_from_directory function sends the file to the browser safely.

Examples
This example serves JavaScript files from static/js folder when requested via /js/filename.js.
Flask
from flask import Flask, send_from_directory

app = Flask(__name__)

@app.route('/js/<path:filename>')
def serve_js(filename):
    return send_from_directory('static/js', filename)
Flask can serve static files automatically from the static folder without extra routes.
Flask
from flask import Flask

app = Flask(__name__, static_url_path='/static')

# Flask automatically serves files from 'static' folder

if __name__ == '__main__':
    app.run()
Sample Program

This Flask app serves an HTML page with a button. The JavaScript file script.js is served from static/js folder and adds a message when the button is clicked.

Flask
from flask import Flask, send_from_directory

app = Flask(__name__)

@app.route('/')
def index():
    return '''<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Serve JS Example</title>
  <script src="/js/script.js"></script>
</head>
<body>
  <h1>Click the button</h1>
  <button onclick="showMessage()">Click me</button>
  <p id="message"></p>
</body>
</html>'''

@app.route('/js/<path:filename>')
def serve_js(filename):
    return send_from_directory('static/js', filename)

if __name__ == '__main__':
    app.run(debug=True)
OutputSuccess
Important Notes

Put your JavaScript files inside the static/js folder to keep things organized.

Flask automatically serves files from the static folder, so you can also link scripts with /static/js/script.js without extra routes.

Use browser developer tools (F12) to check if your JavaScript file loads correctly and to debug any errors.

Summary

Serving JavaScript files lets your web pages run scripts for interactivity.

Place JavaScript files in a static folder and use Flask routes or default static serving to deliver them.

Link JavaScript files in your HTML with <script src="..."></script> tags.

Practice

(1/5)
1. In Flask, where should you place your JavaScript files so they can be served correctly to the browser?
easy
A. Inside the static folder
B. Inside the templates folder
C. In the root project directory
D. Inside the instance folder

Solution

  1. Step 1: Understand Flask static file serving

    Flask automatically serves files placed in the static folder to the browser.
  2. Step 2: Identify correct folder for JavaScript files

    JavaScript files must be inside the static folder to be accessible via URL.
  3. Final Answer:

    Inside the static folder -> Option A
  4. Quick Check:

    Static folder = JavaScript files served [OK]
Hint: Always put JS files in the static folder for Flask to serve them [OK]
Common Mistakes:
  • Placing JS files in templates folder
  • Putting JS files in root directory
  • Expecting instance folder to serve static files
2. Which of the following is the correct way to link a JavaScript file named app.js located in the static folder inside your Flask HTML template?
easy
A. <script src="/templates/app.js"></script>
B. <script src="/static/app.js"></script>
C. <script href="/static/app.js"></script>
D. <link src="/static/app.js">

Solution

  1. Step 1: Use correct HTML tag for JavaScript

    The <script> tag with the src attribute is used to link JS files.
  2. Step 2: Use correct path to static folder

    Flask serves static files under the /static/ URL prefix, so path should be /static/app.js.
  3. Final Answer:

    <script src="/static/app.js"></script> -> Option B
  4. Quick Check:

    Script tag + /static path = correct link [OK]
Hint: Use
Common Mistakes:
  • Using <link> instead of <script>
  • Using href instead of src in <script>
  • Linking to /templates folder
3. Given this Flask route and folder structure, what will happen when the browser requests /static/script.js?
app.py:
from flask import Flask
app = Flask(__name__)

@app.route('/')
def home():
    return 'Hello'
Folder structure: - static/ - script.js - app.py
medium
A. The home route will return 'Hello' instead
B. A 404 Not Found error will occur
C. Flask will raise a runtime error
D. The file script.js will be served automatically

Solution

  1. Step 1: Understand Flask static file serving default behavior

    Flask automatically serves files inside the static folder at the URL path /static/filename.
  2. Step 2: Check if route conflicts with static path

    The / route does not conflict with /static/script.js, so static file is served.
  3. Final Answer:

    The file script.js will be served automatically -> Option D
  4. Quick Check:

    Static folder files served automatically at /static/ [OK]
Hint: Files in static folder served at /static/filename URL [OK]
Common Mistakes:
  • Thinking Flask needs explicit route for static files
  • Confusing root route with static file path
  • Expecting 404 without static folder
4. You wrote this Flask route to serve a JavaScript file manually:
@app.route('/js/app.js')
def serve_js():
    return open('static/app.js').read()
But the browser shows the JavaScript code as plain text instead of running it. What is the problem?
medium
A. The response is missing the correct Content-Type header for JavaScript
B. The file path 'static/app.js' is incorrect
C. You cannot serve JavaScript files manually in Flask
D. The route path should be '/static/app.js' instead of '/js/app.js'

Solution

  1. Step 1: Check how Flask serves static files

    Flask sets the Content-Type header to 'application/javascript' automatically for static files.
  2. Step 2: Identify missing Content-Type in manual response

    Returning raw file content without setting Content-Type causes browser to treat it as plain text.
  3. Final Answer:

    The response is missing the correct Content-Type header for JavaScript -> Option A
  4. Quick Check:

    Set Content-Type to application/javascript for JS files [OK]
Hint: Always set Content-Type header when serving JS manually [OK]
Common Mistakes:
  • Not setting Content-Type header
  • Assuming Flask auto-sets headers in manual routes
  • Using wrong file path without checking
5. You want to serve multiple JavaScript files from a custom folder named assets/js instead of the default static folder. Which Flask code snippet correctly serves these files at URL path /js/<filename>?
hard
A. @app.route('/js/<filename>') def serve_js(filename): return open(f'assets/js/{filename}').read()
B. from flask import send_file @app.route('/js/<filename>') def serve_js(filename): return send_file(f'assets/js/{filename}')
C. from flask import send_from_directory @app.route('/js/<filename>') def serve_js(filename): return send_from_directory('assets/js', filename)
D. @app.route('/js/<filename>') def serve_js(filename): return redirect(f'/static/{filename}')

Solution

  1. Step 1: Use send_from_directory to serve files from custom folder

    Flask's send_from_directory safely serves files from any folder with correct headers.
  2. Step 2: Map URL path to custom folder

    The route /js/<filename> calls send_from_directory('assets/js', filename) to serve files from assets/js.
  3. Final Answer:

    Use send_from_directory with assets/js folder -> Option C
  4. Quick Check:

    send_from_directory + custom folder = correct serving [OK]
Hint: Use send_from_directory to serve files outside static folder [OK]
Common Mistakes:
  • Using send_file without setting headers
  • Reading file content without headers
  • Redirecting to static folder without files there
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard