136

How do you use url_for in Flask to reference a file in a folder? For example, I have some static files in the static folder, some of which may be in subfolders such as static/bootstrap.

When I try to serve a file from static/bootstrap, I get an error.

 <link rel=stylesheet type=text/css href="{{ url_for('static/bootstrap', filename='bootstrap.min.css') }}"> 

I can reference files that aren't in subfolders with this, which works.

 <link rel=stylesheet type=text/css href="{{ url_for('static', filename='bootstrap.min.css') }}"> 

What is the correct way to reference static files with url_for? How do I use url_for to generate urls to static files at any level?

0

2 Answers 2

247

You have by default the static endpoint for static files. Also Flask application has the following arguments:

static_url_path: can be used to specify a different path for the static files on the web. Defaults to the name of the static_folder folder.

static_folder: the folder with static files that should be served at static_url_path. Defaults to the 'static' folder in the root path of the application.

It means that the filename argument will take a relative path to your file in static_folder and convert it to a relative path combined with static_url_default:

url_for('static', filename='path/to/file') 

will convert the file path from static_folder/path/to/file to the url path static_url_default/path/to/file.

So if you want to get files from the static/bootstrap folder you use this code:

<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='bootstrap/bootstrap.min.css') }}"> 

Which will be converted to (using default settings):

<link rel="stylesheet" type="text/css" href="static/bootstrap/bootstrap.min.css"> 

Also look at url_for documentation.

Sign up to request clarification or add additional context in comments.

Comments

-2

In my case I had special instruction into nginx configuration file:

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { try_files $uri =404; } 

All clients have received '404' because nginx nothing known about Flask.

The primary configuration file is /etc/nginx/nginx.conf on Linux. It may be similar on Windows.

1 Comment

Hard-coding a list of file extensions like that seems like it will create surprises and toil to maintain. Probably better to use something that explicitly mentions the /static/ path prefix and then serves whatever file the user requests from within that static directory. Also ensure you avoid common nginx errors with that setup.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.