Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Flask: serve assets without leading slash using url_for

I'm working on a Flask app that uses url_for to specify the route to some static assets (js, css, etc). Here's an example from one of the templates:

<script src='{{ url_for('static', filename='js/search.js') }}'></script>

When this gets rendered into html, the path looks like this:

<script src='/static/js/search.js'></script>

Is it possible to modify this behavior such that the leading slash is dropped from the rendered script path? The goal is to render the following:

<script src='static/js/search.js'></script>

I'd be very grateful for any insights others can offer on this question!

like image 602
duhaime Avatar asked Mar 12 '18 00:03

duhaime


1 Answers

I was having a similar issue with loading a css file that was on a custom static path. One fix could be to change the ROOT_DIRECTORY of the application, but this didn't work for my application as I only need to change the static path.

I used a combination of static_folder and static_url_path:

STATIC_URL_PATH = '/your/custom/path/static' # Where the css is stored
STATIC_FOLDER = 'your/custom/path/static'

app = Flask(__name__, static_folder=STATIC_FOLDER,
            static_url_path=STATIC_URL_PATH)

As you can see, the main difference is the leading / in the beginning, but this made the app to be able to find the css.

like image 180
Divadrare Avatar answered Oct 14 '22 15:10

Divadrare