我在Flask中有2个静态目录.
css/js/1/
index.htmldetails.json2/
index.htmldetails.json我跟着其他一些答案,浏览了文档以提供静态文件.
app = Flask(__name__)
app.config['RESULT_STATIC_PATH'] = "results/"
@app.route('/results/<path:file>')
def serve_results(file):
# Haven't used the secure way to send files yet
return send_from_directory(app.config['RESULT_STATIC_PATH'], file)
Run Code Online (Sandbox Code Playgroud)
使用以下代码,我现在可以请求目录中的results文件.
我对PHP和Apache更熟悉.假设一个目录有一个index.php或一个index.html文件,它会自动提供.
我的要求: -
localhost:3333/results/1我应该送达index.html我可以通过添加路由并检查index.html是否存在子目录然后提供它来对Flask做同样的事情.我在这里找到了一些类似的指针
我目前使用两条路线来获取功能.肯定有更好的方法.
为什么我要包含有关静态目录的详细信息?
我极有可能做错了什么.请告诉我.谢谢 :)
尝试这个:
@app.route('/results/<path:file>', defaults={'file': 'index.html'})
def serve_results(file):
# Haven't used the secure way to send files yet
return send_from_directory(app.config['RESULT_STATIC_PATH'], file)
Run Code Online (Sandbox Code Playgroud)
这是为该参数传递默认值的方法。但是,我不同意这一点,如果您想提供静态内容,只需在您的网络服务器(在您的情况下为 apache)中设置规则即可。
Abh*_*pal -1
我找不到仅使用一条路线的解决方案。我最终用了这个。
@app.route('/results/<path:filename>')
def serve_static(filename):
return send_from_directory("results/", filename)
@app.route('/results/<guid>')
def index(guid):
return send_from_directory("results/" + guid, 'index.html')
Run Code Online (Sandbox Code Playgroud)
@ipinak 建议用作defaults={'file': 'index.html'}另一个参数。这并不能解决这个问题,因为它会导致一些安全问题,@ipinak 已经很好地研究了这些问题。
defaults是一个很好的选项,我也会尝试在应用程序的其他地方使用它。
@dirn 在评论中建议使用 Apache/Nginx 来提供静态文件。这会节省时间,因为我不必在 Flask 中实现东西。由于静态文件不必传递给 Python 解释器,因此我们可以通过另一台服务器提供它们,几乎不需要任何额外的工作。
| 归档时间: |
|
| 查看次数: |
7208 次 |
| 最近记录: |