С Flask, как я могу служить robots.txt и sitemap.xml в качестве статических файлов?

Я читал в тишине несколько мест, где статические файлы должны быть оставлены на сервере, например, в нескольких ответах на этот вопрос 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") 

Есть ли вред в этом, или мой подход в порядке?

  • Переменная область вне классов
  • Оповещения в Python?
  • Сравнение числовых массивов float в модульных тестах
  • Python не может выделять память с помощью multiprocessing.pool
  • Понимание основного метода python
  • Как разместить скрипт cgi python с помощью `python -m SimpleHTTPServer 8000` или` python -m CGIHTTPServer 8000`?
  • Pandas: Diff of two Dataframes
  • Как импортировать src из модуля тестирования в python
  • 3 Solutions collect form web for “С Flask, как я могу служить robots.txt и sitemap.xml в качестве статических файлов?”

    Поместите 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 и поместите туда свои файлы. Затем, когда вы static_url_path , укажите параметр static_url_path :

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

    По умолчанию используется статические файлы из /static/ path, но вы хотите, чтобы они обслуживались с / поэтому они ожидаются.

    Для получения дополнительной информации см. Документы API фляг .

    В дополнение к накладным и ненужным кодам проблема с вашим подходом заключается в том, что если / когда один из файлов, которые вы хотите обслуживать, содержит что-то похожее на тег шаблона на render_template – вы можете вызвать ошибку рендеринга. Если вы должны были прочитать файл в памяти (один раз, а не внутри метода), используйте эту строку в качестве тела ответа без вызова render_template , вы, по крайней мере, избежите этой проблемы.

    Лучший способ – установить static_url_path на корневой URL-адрес

     from flask import Flask app = Flask(__name__, static_folder='static', static_url_path='') 
    Python - лучший язык программирования в мире.