我在一些地方读到静态文件的服务应该留给服务器,例如在这个问题的几个答案中。但是我使用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")
这有什么害处吗,还是我的方法没问题?
将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:])
Flask内置了对静态文件服务的支持。
创建一个/static
目录并将文件放在那里。然后,在实例化Flask
时,指定static_url_path
参数:
app = Flask(__name__, static_url_path='/')
默认是从/static/
路径提供静态文件,但您希望从/
路径提供静态文件,以便它们在预期的位置。
参见Flask API Docs获取更多信息。
除了开销和不必要的代码之外,您的方法的问题是,如果/当您想要提供的其中一个文件包含看起来像render_template
的模板标记的东西时,您可能会导致呈现错误。如果您要将文件读入内存(一次,而不是在方法中),然后使用该字符串作为响应的主体,而不调用render_template
,您至少可以避免这个问题。
最好的方法是将static_url_path设置为根url
from flask import Flask
app = Flask(__name__, static_folder='static', static_url_path='')