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.txtandsitemap.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:])
于 2012-12-27T11:36:36.020 に答える
11

Flask には、静的ファイルを提供するためのサポートが組み込まれています。

ディレクトリ/staticを作成し、そこにファイルを置きます。次に、 をインスタンス化するときに、次のパラメータFlaskを指定します。static_url_path

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

デフォルトでは、パスから静的ファイルを提供しますが、期待される場所にあるように/static/それらを提供したいと考えています/

詳細については、Flask API ドキュメントを参照してください。

オーバーヘッドと不要なコードに加えて、提供したいファイルの 1 つにテンプレート タグのようなものが含まれているrender_template場合、レンダリング エラーが発生する可能性があります。ファイルをメモリに (一度、メソッド内ではなく) 読み込んでから、 を呼び出さずにその文字列を応答の本文として使用するrender_template場合、少なくともその問題は回避できます。

于 2012-12-27T03:26:53.103 に答える