静的ファイルの提供をサーバーに任せるべきであるという静かな場所をいくつか読んだことがあります。たとえば、これに関するいくつかの回答 SO質問 。しかし、私は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")
これに害はありますか、それとも私のアプローチは大丈夫ですか?
プット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 を参照してください。
オーバーヘッドと不要なコードに加えて、アプローチの問題は、提供するファイルの1つにrender_template
のテンプレートタグのようなものが含まれている場合、レンダリングエラーが発生する可能性があることです。ファイルをメモリに読み込んで(メソッド内ではなく、一度)、render_template
を呼び出さずにその文字列を応答の本文として使用する場合は、少なくともその問題を回避できます。
最良の方法は、static_url_pathをルートURLに設定することです。
from flask import Flask
app = Flask(__name__, static_folder='static', static_url_path='')