els*_*sar 25 python static-files flask
我已经安静地阅读了一些提供静态文件的地方应该留给服务器,例如在这个SO问题的几个答案中.但是我使用的是OpenShift PaaS,并且无法弄清楚如何在那里修改.htaccess文件.
我遇到了这段代码,它从模板中提供站点地图.我在我的应用上为sitemap和robots.txt做了这样的事情,就像这样 -
@app.route("/sitemap.xml")
def sitemap_xml():
response= make_response(render_template("sitemap.xml"))
response.headers['Content-Type'] = 'application/xml'
return response
@app.route("/robots.txt")
def robots_txt():
return render_template("robots.txt")
Run Code Online (Sandbox Code Playgroud)
这有什么害处,还是我的方法好吗?
Aud*_*kas 75
把robots.txt和sitemap.xml到您的应用程序的static目录,并定义了这样的观点:
from flask import Flask, request, send_from_directory
@app.route('/robots.txt')
@app.route('/sitemap.xml')
def static_from_root():
return send_from_directory(app.static_folder, request.path[1:])
Run Code Online (Sandbox Code Playgroud)
Flask内置支持提供静态文件.
创建一个/static目录并将文件放在那里.然后,在实例化时Flask,指定static_url_path参数:
app = Flask(__name__, static_url_path='/')
Run Code Online (Sandbox Code Playgroud)
默认设置是从/static/路径中提供静态文件,但是您希望它们能够提供服务,/以便它们符合预期.
有关详细信息,请参阅Flask API文档.
除了开销和不必要的代码之外,您的方法的问题是,如果/当您要提供的某个文件包含看起来像模板标记的文件时render_template- 您可能会导致渲染错误.如果你要将文件读入内存(一次,不在方法内),然后使用该字符串作为响应的主体而不调用render_template,你至少应该避免这个问题.
最好的方法是将static_url_path设置为 root url
from flask import Flask
app = Flask(__name__, static_folder='static', static_url_path='')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10009 次 |
| 最近记录: |