Python flask - обслуживание статических файлов
Я пытаюсь использовать статический файл, используя флягу. Я не знаю, как использовать функцию url_for. Все мои маршруты, генерирующие динамический контент, работают нормально, я импортировал url_for, но когда у меня есть этот код:
@app.route('/')
def home():
return url_for('static', filename='hi.html')
Наряду с моим файлом "hi.html" (который содержит в себе некоторый базовый html), который находится в каталоге static, то, что я получаю, когда загружаю страницу, буквально это:
/static/hi.html
Я использую url_for неправильно?
Ответы
Ответ 1
url_for
просто возвращает именно URL-адрес этого файла. Похоже, вы хотите redirect
к URL-адресу для этого файла. Вместо этого вы просто отправляете текст URL-адреса клиенту в качестве ответа.
from flask import url_for, redirect
@app.route('/')
def home():
return redirect(url_for('static', filename='hi.html'))
Ответ 2
Вы получаете правильный результат для того, что делаете. url_for
генерирует url для аргументы, которые вы ему даете. В вашем случае вы создаете url для файла hi.html
в каталоге static
. Если вы хотите действительно вывести файл, вам нужно
from flask import render_template, url_for
...
return render_template(url_for("static", filename="hi.html"))
Но в этот момент ваш статический каталог должен находиться в каталоге шаблонов (где бы он ни был настроен для жизни).
Если вы собираетесь обслуживать статические html файлы, подобные этому, то мое предложение будет состоять в том, чтобы обслуживать их за пределами приложения флэшей, направляя трафик на /static/.*
непосредственно с вашего веб-сервера. В Интернете есть много примеров для этого, используя nginx или apache.