Change static folder from config in Flask

18,923

Solution 1

I don't know anything about that snippet, but

some_function(...) = some_value

is never valid Python (Python doesn't have l-values). It looks like config has a dict-like interface, so the offending line should probably just be

self.config['STATIC_FOLDER'] = value

Probably a copy-and-paste error from the getter definition above the setter.

Solution 2

Okay, I assume you want to use a custom path to the static folder for whatever reason. I wanted to do the same for the sake of better app modularity.

Here's my app folder structure:

instance/
core/
  |_templates/
  |_static/
  |_views.py
run.py
config.py

As you can see, my static folder is inside the core folder.

In run.py, you can do the following:

app = Flask(__name__, static_url_path=None)

if __name__ == '__main__':
    app.config.from_object('config')

    # config file has STATIC_FOLDER='/core/static'
    app.static_url_path=app.config.get('STATIC_FOLDER')

    # set the absolute path to the static folder
    app.static_folder=app.root_path + app.static_url_path

    print(app.static_url_path)
    print(app.static_folder)

    app.run(
        host=app.config.get('HOST'),
        port=app.config.get('PORT'),
        threaded=True
        )

This is what I did, and it works perfectly fine. I'm using flask 0.12.

Solution 3

app = Flask(__name__, static_url_path="/STATIC_FOLDER", static_folder='STATIC_FOLDER')

Solution 4

Yes, In one of my projects I am using/setting a custom path for STATIC_FOLDER. You can set the path to STATIC_FOLDER in config.py like below:

STATIC_PATH = '<project-name>/<path-to-static-folder>/'

ex:

STATIC_PATH = 'myApp/static/'

If you can write your project structure then I can answer it as per your requirements.

Share:
18,923
Nurjan
Author by

Nurjan

I am a software engineer. Interested in Python, Java and Linux.

Updated on June 09, 2022

Comments

  • Nurjan
    Nurjan almost 2 years

    Has anyone tried this snippet flask config based static folder code cnippet?

    The code:

    import flask
    class MyFlask(flask.Flask):
        @property
        def static_folder(self):
            if self.config.get('STATIC_FOLDER') is not None:
                return os.path.join(self.root_path, 
                    self.config.get('STATIC_FOLDER'))
        @static_folder.setter
        def static_folder(self, value):
            self.config.get('STATIC_FOLDER') = value
    
    # Now these are equivalent:
    app = Flask(__name__, static_folder='foo')
    
    app = MyFlask(__name__)
    app.config['STATIC_FOLDER'] = 'foo'
    

    In my case in complains about this line:

    self.config.get('STATIC_FOLDER') = value
    

    The error message: Can't assign to function call

    Does anyone how to set the static_folder from the config.py file in Flask?

  • Alen Siljak
    Alen Siljak over 5 years
    So, is it STATIC_FOLDER or STATIC_PATH?
  • Yasin Farmani
    Yasin Farmani about 3 years
    Can you explain which what is the difference between static_url_path, static_folder?
  • dream-blue
    dream-blue over 2 years
    app_ = Flask(name, static_url_path=None) app_.config.from_object('config') # i fix the bug with down there code .thank you a lot. app_.static_folder = app_.config.get("STATICFILES_DIR") app_.template_folder = app_.config.get("TEMPLATES_DIR")
  • bfontaine
    bfontaine over 2 years
    @YasinFarmani see also the answer below stackoverflow.com/a/45623197/735926