В файле templates/index.html
я могу записать
<link rel="stylesheet" type="text/css"
href={{ url_for('static', filename='css/main.css') }}>
и url_for
очень просто получает файл CSS из статической папки (FWIW, несмотря на то, что css/main.css
имеет косую черту в Windows).
Я хотел бы открыть статический файл static/number.txt
, прочитать из него одно число и отобразить это число.
app.py
from flask import Flask, render_template, url_for
app = Flask(__name__)
@app.route('/')
def number():
filename = url_for('static', filename='txt/number.txt')
with open(filename) as f:
number = next(f)
return render_template('index.html', number=number)
if __name__ == '__main__':
app.run()
static / txt / number.txt
2345
templates / index.html
<body>
{{ number }}
</body>
Для этого простого примераЯ не пытаюсь оптимизировать, запустив Nginx и IIUC, эта простая задача не требует ни send_from_directory()
, ни os.getcwd()
.Также нет необходимости возиться с app.static_folder
и не беспокоиться о разделителе папок с помощью os.join.path()
(я нахожусь на Windows, но в идеале это должно быть невидимым в коде).Также нет необходимости изменять папку по умолчанию static
.
Приведенный выше код дает мне
c:\read-static>python app.py
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
ERROR in app: Exception on / [GET]
Traceback (most recent call last):
File "C:\anaconda3\flask\app.py", line 1982, in wsgi_app
response = self.full_dispatch_request()
...
File "app.py", line 10, in number
with open(filename) as f:
FileNotFoundError: [Errno 2] No such file or directory: '/static/txt/number.txt'
127.0.0.1 - "GET / HTTP/1.1" 500 -
Чего мне не хватает?Должен ли я использовать os.getcwd()
для чтения статического файла во Flask?Что-то, полагаясь на os.getcwd()
, кажется неприятным / хакерским.