35

我已经在安静的几个地方阅读了应该将静态文件服务留给服务器的地方,例如在这个SO question的几个答案中。但我使用 OpenShift PaaS,不知道如何在那里修改 .htaccess 文件。

我遇到了从模板提供站点地图的这段代码。我在我的应用程序上为站点地图和 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")

这有什么害处,还是我的方法可以?

4

3 回答 3

99

放入您的应用程序目录robots.txt并定义此视图:sitemap.xmlstatic

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:])
于 2012-12-27T11:36:36.020 回答
11

Flask 内置了对提供静态文件的支持。

创建一个/static目录并将文件放在那里。然后,当您实例化时Flask,指定static_url_path参数:

app = Flask(__name__, static_url_path='/')

默认是从/static/路径提供静态文件,但您希望它们从那里提供,/以便它们在预期的位置。

有关更多信息,请参阅Flask API 文档

除了开销和不必要的代码之外,您的方法的问题是,如果/当您要提供的文件之一包含看起来像模板标签的内容时,render_template您可能会导致呈现错误。如果您要将文件读入内存(一次,而不是在方法内部)然后将该字符串用作响应的主体而不调用render_template,您至少可以避免该问题。

于 2012-12-27T03:26:53.103 回答
4

最好的方法是将static_url_path设置为根 url

from flask import Flask

app = Flask(__name__, static_folder='static', static_url_path='')
于 2014-09-03T22:03:37.453 回答