파일을 렌더링하려고합니다 home.html
. 파일이 내 프로젝트에 있지만 jinja2.exceptions.TemplateNotFound: home.html
렌더링하려고 할 때 계속 표시됩니다. Flask가 내 템플릿을 찾을 수없는 이유는 무엇입니까?
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('home.html')
/myproject
app.py
home.html
답변
올바른 위치에 템플릿 파일을 만들어야합니다. templates
Python 모듈 옆 의 하위 디렉토리에 있습니다.
이 오류는 디렉터리에 home.html
파일 이 없음을 나타냅니다 templates/
. 파이썬 모듈과 동일한 디렉토리에 해당 디렉토리를 생성했는지, 실제로 home.html
해당 하위 디렉토리에 파일을 넣었는지 확인하십시오 . 앱이 패키지 인 경우 패키지 내부에 템플릿 폴더를 만들어야 합니다.
myproject/
app.py
templates/
home.html
myproject/
mypackage/
__init__.py
templates/
home.html
또는 템플릿 폴더의 이름을 다른 templates
이름으로 지정하고 기본값으로 이름을 바꾸고 싶지 않은 경우 Flask에 다른 디렉터리를 사용하도록 지시 할 수 있습니다.
app = Flask(__name__, template_folder='template') # still relative to module
EXPLAIN_TEMPLATE_LOADING
옵션 을 로 설정하여 주어진 템플릿을 찾는 방법을 설명하도록 Flask에 요청할 수 있습니다 True
. 로드 된 모든 템플릿 에 대해 레벨에서 Flask에app.logger
기록 된 보고서를 받게 됩니다 INFO
.
검색이 성공했을 때의 모습입니다. 이 예에서 foo/bar.html
템플릿은 템플릿을 확장 base.html
하므로 두 가지 검색이 있습니다.
[2019-06-15 16:03:39,197] INFO in debughelpers: Locating template "foo/bar.html":
1: trying loader of application "flaskpackagename"
class: jinja2.loaders.FileSystemLoader
encoding: 'utf-8'
followlinks: False
searchpath:
- /.../project/flaskpackagename/templates
-> found ('/.../project/flaskpackagename/templates/foo/bar.html')
[2019-06-15 16:03:39,203] INFO in debughelpers: Locating template "base.html":
1: trying loader of application "flaskpackagename"
class: jinja2.loaders.FileSystemLoader
encoding: 'utf-8'
followlinks: False
searchpath:
- /.../project/flaskpackagename/templates
-> found ('/.../project/flaskpackagename/templates/base.html')
Blueprint는 자체 템플릿 디렉토리 도 등록 할 수 있지만, Blueprint를 사용하여 더 큰 프로젝트를 논리 단위로 쉽게 분할 할 수있는 경우에는 필요하지 않습니다. Blueprint 당 추가 경로를 사용하는 경우에도 기본 Flask 앱 템플릿 디렉터리가 항상 먼저 검색됩니다.
답변
Flask는 기본적으로 디렉터리 템플릿을 사용한다고 생각합니다. 따라서 귀하의 코드는 이것이 귀하의 hello.py라고 가정해야합니다.
from flask import Flask,render_template
app=Flask(__name__,template_folder='template')
@app.route("/")
def home():
return render_template('home.html')
@app.route("/about/")
def about():
return render_template('about.html')
if __name__=="__main__":
app.run(debug=True)
그리고 작업 공간 구조는
project/
hello.py
template/
home.html
about.html
static/
js/
main.js
css/
main.css
또한 home.html 및 about.html 이름으로 두 개의 html 파일을 만들고 해당 파일을 템플릿 폴더에 넣습니다.
답변
(파일 / 프로젝트 구조에 대해 제공된 위의 수락 된 답변은 절대적으로 정확합니다.)
또한..
프로젝트 파일 구조를 적절하게 설정하는 것 외에도 적절한 수준의 디렉토리 계층 구조를 보도록 flask에 알려야합니다.
예를 들어 ..
app = Flask(__name__, template_folder='../templates')
app = Flask(__name__, template_folder='../templates', static_folder='../static')
로 시작하면 ../
한 디렉토리 뒤로 이동하고 거기서 시작합니다.
로 시작하면 ../../
두 개의 디렉토리가 뒤로 이동하고 거기에서 시작됩니다 (등 …).
도움이 되었기를 바랍니다
답변
이유는 모르겠지만 대신 다음 폴더 구조를 사용해야했습니다. 나는 “템플릿”을 한 단계 위로 올렸다.
project/
app/
hello.py
static/
main.css
templates/
home.html
venv/
이것은 아마도 다른 곳에서 구성이 잘못되었음을 나타낼 수 있지만 그것이 무엇인지 알 수 없었고 이것이 작동했습니다.
답변
다음 사항을 확인하십시오.
- 템플릿 파일에 올바른 이름이 있습니다.
- 템플릿 파일은 다음과 같은 하위 디렉토리에 있습니다.
templates
- 전달하는 이름
render_template
은 템플릿 디렉토리에 상대적입니다 (템플릿 디렉토리에index.html
직접 있고 템플릿 디렉토리auth/login.html
의 auth 디렉토리 아래에 있음). - 앱과 이름이 같은 하위 디렉터리가 없거나 템플릿 디렉터리가 해당 하위 디렉터리 내에 있습니다.
그래도 작동하지 않으면 디버깅 ( app.debug = True
)을 켜서 문제를 파악하는 데 도움이 될 수 있습니다.
답변
설치된 패키지에서 코드를 실행하는 경우 템플릿 파일이 디렉토리에 있는지 확인하십시오 <python root>/lib/site-packages/your-package/templates
.
세부 사항 :
내 경우에는 내가 프로젝트의 예를 실행하려고했다 flask_simple_ui을 하고 jinja
항상 말할 것
jinja2.exceptions.TemplateNotFound : form.html
트릭은 샘플 프로그램이 설치된 패키지를 가져 오는 것 flask_simple_ui
입니다. 그리고 ninja
그 패키지 내부에서 사용되는 것은 내 경우에는 예상대로 ...python/lib/site-packages/flask_simple_ui
대신 패키지 경로를 조회하기 위해 루트 디렉토리로 사용하고 os.getcwd()
있습니다.
내 불행히도 setup.py
버그가 있으며 누락 된 form.html
. 수정하면 TemplateNotFoundsetup.py
의 문제가 사라졌습니다.
누군가에게 도움이되기를 바랍니다.
답변
나는 동일한 오류가 내가 잘못한 유일한 것은 ‘s’가없는 ‘template’폴더의 이름을 지정하는 것뿐이었습니다. 그것을 변경 한 후에는 잘 작동했지만 왜 그런지 모르겠습니다.