템플릿 파일이 변경되면 Plask 앱 다시 로드
하여 Flask (플라스크 하여 (Flask.run
로드합니다:), Python 합니다.
* Detected change in '/home/xion/hello-world/app.py', reloading
* Restarting with reloader
유감스럽게도 이 기능은 *.py 파일에만 사용할 수 있는 것 같고, 다른 파일에도 이 기능을 확장할 수 있는 방법을 찾을 수 없는 것 같습니다.특히 템플릿이 변경될 때 플라스크가 앱을 다시 시작하도록 하는 것이 매우 유용할 것입니다.템플릿에서 마크업을 만지작거리다가 변경 사항이 보이지 않아 혼란스러워하는 경우가 몇 번인지 헤아리지 못했지만, 앱이 이전 버전의 진자 템플릿을 여전히 사용하고 있다는 것을 알게 되었습니다.
그렇다면 템플릿 디렉토리에 플라스크 모니터 파일을 저장할 수 있는 방법이 있습니까? 아니면 프레임워크의 소스로 들어가는 것이 필요합니까?
편집: Ubuntu 10.10을 사용하고 있습니다.다른 플랫폼에서는 시도해 본 적이 없습니다.
추가적인 조사 끝에 앱 자체를 다시 로드하지 않고도 템플릿의 변경 사항이 실시간으로 업데이트된다는 것을 알게 되었습니다.그러나 이는 다음으로 전달되는 템플릿에만 적용되는 것으로 보입니다.flask.render_template
.
하지만 제 앱에는 진자 템플릿에서 사용하는 재사용 가능한 매개 변수화된 구성 요소가 꽤 많이 있습니다.됩니다.{% macro %}
및, ""을 합니다.{% import %}
실제 페이지로 편집했습니다....고 DRY를 하지 않는 ... 수입된 템플릿이 통과되지 않아 수정 여부를 확인할 수 없는 것만 빼면요render_template
조금도.
(호기스럽게도, 다음을 통해 호출되는 템플릿의 경우에는 이 문제가 발생하지 않습니다.{% extends %}
. 에 관해서는{% include %}
잘 요.
결론적으로 말하면, 이 현상의 근원은 진자와 플라스크 또는 Werkzeug 사이 어딘가에 있는 것 같습니다.저는 그것이 그 프로젝트들 중 하나에 버그 추적기로 가는 것을 보장할 수도 있다고 생각합니다 :) 한편, 그것이 제가 실제로 사용했던 해결책이기 때문에 저는 jd.의 대답을 받아들였습니다 - 그리고 그것은 매력적으로 작용합니다.
사용가능
TEMPLATES_AUTO_RELOAD = True
출처: http://flask.pocoo.org/docs/1.0/config/
템플릿 소스의 수정 사항을 확인하고 자동으로 다시 로드할지 여부입니다.기본적으로 값은 없음이며, 이는 Flask가 디버그 모드에서만 원본 파일을 확인함을 의미합니다.
제 은 render_template()
라고 합니다.템플릿이 다르게 사용될 수도 있습니다.
다른 될 때 ( ) 합니다.extra_files
논쟁Flask().run()
해당 .: .
예:
from os import path, walk
extra_dirs = ['directory/to/watch',]
extra_files = extra_dirs[:]
for extra_dir in extra_dirs:
for dirname, dirs, files in walk(extra_dir):
for filename in files:
filename = path.join(dirname, filename)
if path.isfile(filename):
extra_files.append(filename)
app.run(extra_files=extra_files)
여기 보기: http://werkzeug.pocoo.org/docs/0.10/serving/ ? highlight=run_ simple#werkzeug.serving.run_
와 함께 할 때jinja
템플릿, 몇 가지 파라미터를 설정해야 합니다.했습니다라는했습니다.
if __name__ == '__main__':
app.jinja_env.auto_reload = True
app.config['TEMPLATES_AUTO_RELOAD'] = True
app.run(debug=True, host='0.0.0.0')
당신은 A를 설정할 필요가 있습니다.TEMPLATES_AUTO_RELOAD
물으로서의 True
에서:
from flask import Flask
app = Flask(__name__)
app.config["TEMPLATES_AUTO_RELOAD"] = True
http://flask.pocoo.org/docs/1.0/config/ 에서 자세히 보기
저는 는.TEMPLATES_AUTO_RELOAD = True
작동하지 않습니다(0.12 버전).나는 jinja2와 내가 한 일을 사용합니다.
before_request
def before_request(): app.jinja_env.cache = {}
응용프로그램에 등록하기
app.before_request(before_request)
바로 그겁니다.
2021년 3월 기준 업데이트:
flask CLI는 개발 서버를 실행하기 위해 app.run()보다 권장되므로 CLI를 사용하려면 허용된 솔루션을 사용할 수 없습니다.
Flask 1.1 FLASK_RUN_EXTRA_FILES
e--extra-files
수용된 답변과 동일한 작업을 효과적으로 수행합니다.이 github 문제도 참조하십시오.
사용 예시:
flask run --extra-files "app/templates/index.html"
# or
export FLASK_RUN_EXTRA_FILES="app/templates/index.html"
flask run
리눅스에서추가 파일을 여러 개 지정하려면 파일 경로를 콜론(colon)으로 구분합니다.
export FLASK_RUN_EXTRA_FILES="app/templates/index.html:app/templates/other.html"
전체 디렉토리도 지원됩니다.
flask run --extra-files app/templates/
저에게 효과가 있었던 것은 그저 다음과 같은 것을 추가하는 것입니다.
@app.before_request
def before_request():
# When you import jinja2 macros, they get cached which is annoying for local
# development, so wipe the cache every request.
if 'localhost' in request.host_url or '0.0.0.0' in request.host_url:
app.jinja_env.cache = {}
(@dikkini의 답변에서 taken)
로드하기 는 을 했습니다.livereload
꾸러미의 다음과 함께 CLI를 사용하여 CLI를
$ pip install livereload
그리고 코드를 실행하는 것.
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def hello():
return render_template("index.html")
if __name__ == '__main__':
from livereload import Server
server = Server(app.wsgi_app)
server.serve(host = '0.0.0.0',port=5000)
합니다를 해서 모든 을 여기서 .extra_files
tTEMPLATES_AUTO_RELOAD
의 F5다를 livereload
Windows에서 최신 버전의 Flask를 사용하면 run 명령과 debug set을 true로 설정할 수 있습니다. 템플릿 변경 사항을 적용하려면 Flask를 재설정할 필요가 없습니다.Shift + F5(또는 Shift + reload 버튼)를 사용하여 캐시된 내용이 없는지 확인합니다.
저도 같은 고민이 있었습니다.해결책은 정말 간단합니다.이 대신:
if __name__ == '__main__':
app.jinja_env.auto_reload = True
app.config["TEMPLATES_AUTO_RELOAD"] = True
app.run(debug=True)
놓다
app.jinja_env.auto_reload = True
app.config["TEMPLATES_AUTO_RELOAD"] = True
주 기능 이상의따라서 최종 출력은 다음과 같습니다.
from flask import Flask, app,render_template
app= Flask(__name__)
app.jinja_env.auto_reload = True
app.config["TEMPLATES_AUTO_RELOAD"] = True
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
http://flask.pocoo.org/docs/1.0/quickstart/ 참조 및 사용FLASK_ENV=development
템플릿이 자동으로 다시 로드되는데, 이 작업을 수행하지 않는 이유는 무엇입니까?ctrl+f5
웹 페이지를 새로 고치기 위해 웹 browsers는 일반적으로 캐시를 절약합니다.
app.config['TEMPLATES_AUTO_RELOAD'] = True
if __name__ == '__main__':
저한테는 안 돼요!
작동하는 것은 추가하는 것입니다.app.config['TEMPLATES_AUTO_RELOAD'] = True
app = Flask(__name__)
가 를 .app.run(debug=True)
언급URL : https://stackoverflow.com/questions/9508667/reload-flask-app-when-template-file-changes
'programing' 카테고리의 다른 글
Spring Boot 앱: application.properties를 선택하지 않습니까? (0) | 2023.10.16 |
---|---|
git가 .gitignore 파일에 없는 파일을 무시하는 이유는 무엇입니까? (0) | 2023.10.16 |
libav 형식으로 메모리에 있는 파일 읽기 (0) | 2023.10.16 |
PHP를 이용하여 mysql 또는 pdo에서 ALTER 문의 결과를 어떻게 보여주나요? (0) | 2023.10.11 |
a + b + c = 1000인 피타고라스 삼중항 찾기 (0) | 2023.10.11 |