一尘不染

从Flask中的配置更改静态文件夹

flask

有人尝试过基于静态文件夹代码片段的此片段flask配置吗?

代码:

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'

就我而言,我抱怨这条线:

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

错误信息: Can't assign to function call

有谁能通过Flask中的config.py文件设置static_folder?


阅读 976

收藏
2020-04-07

共2个答案

一尘不染

对该片段一无所知,但是

some_function(...) = some_value

永远不是有效的Python(Python没有l值)。看起来好像config有一个类似dict的界面,所以令人反感的行应该只是

self.config['STATIC_FOLDER'] = value

在setter上方的getter定义中可能存在复制和粘贴错误。

2020-04-07
一尘不染

我认为无论出于何种原因,你都想使用自定义路径访问静态文件夹。我希望这样做是为了更好的应用程序模块化。

这是我的应用程序文件夹结构:

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

如你所见,我的static文件夹位于该core文件夹内。

在中run.py,你可以执行以下操作:

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
        )

这就是我所做的,并且效果很好。我正在使用flask0.12。

2020-04-07