0
0
FlaskHow-ToBeginner · 3 min read

How to Use url_for for Static Files in Flask

In Flask, use url_for('static', filename='path/to/file') to generate the URL for static files. This helps you link CSS, JavaScript, or images stored in the static folder reliably in your templates or code.
📐

Syntax

The url_for function generates URLs for your Flask app's routes and static files. To link static files, use:

  • url_for('static', filename='yourfile.ext')

Here:

  • 'static' tells Flask you want a static file URL.
  • filename is the path to the file inside the static folder.
python
url_for('static', filename='css/style.css')
💻

Example

This example shows how to use url_for in a Flask template to link a CSS file stored in the static/css folder.

python
from flask import Flask, render_template, url_for

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

# index.html content:
# <!DOCTYPE html>
# <html lang="en">
# <head>
#     <meta charset="UTF-8">
#     <meta name="viewport" content="width=device-width, initial-scale=1.0">
#     <title>Static File Example</title>
#     <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
# </head>
# <body>
#     <h1>Hello, Flask!</h1>
# </body>
# </html>
Output
When you visit the home page, the browser loads the CSS file from /static/css/style.css, styling the page.
⚠️

Common Pitfalls

Common mistakes when using url_for for static files include:

  • Not placing files inside the static folder.
  • Incorrect filename path, such as missing subfolders.
  • Using url_for without quotes around 'static'.
  • Trying to use url_for outside Flask context (like plain HTML files).

Always ensure your static files are inside the static directory and paths match exactly.

html
## Wrong usage example:
# <link rel="stylesheet" href="{{ url_for(static, filename='css/style.css') }}">

## Correct usage:
# <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
📊

Quick Reference

UsageDescription
url_for('static', filename='file.ext')Generate URL for a static file inside the static folder
filename='css/style.css'Path inside static folder to CSS file
filename='js/app.js'Path inside static folder to JavaScript file
filename='images/logo.png'Path inside static folder to image file

Key Takeaways

Use url_for('static', filename='path') to link static files in Flask templates.
Always place your static files inside the 'static' folder of your Flask project.
Ensure the filename path matches the file's location inside the static folder exactly.
Use quotes around 'static' in url_for to avoid syntax errors.
url_for helps generate correct URLs even if your app's URL structure changes.