VSCode에서 Jinja2 템플릿 디버깅
그래서 "jinja: "true"
launch.json에 대한 옵션을 찾았고 지금까지 실패한 jinja 디버깅 작업을 시도하고 있습니다.
내 launch.json은 현재 다음과 같습니다.
{
"version": "0.2.0",
"configurations": [
{
"name": " uvicorn debug",
"type": "python",
"request": "launch", // set to "test" for "justMyCode" to work.
"module": "uvicorn",
"args":
[
"project.asgi:app",
"--reload",
],
"jinja": true,
"justMyCode": false
}
] }
jinja 템플릿 파일에서 중단 점을 설정할 수 없다는 문제에 직면했지만 "debug.allowBreakpointsEverywhere": true
vscode 설정에 추가 하여 해결했습니다 .
내 질문은 다음과 같습니다.
a) 디버깅 템플릿은 어떻게 작동해야합니까? 템플릿의 아무 곳에 나 중단 점을 추가하면 실행이 중지됩니까? 아니면 'jinja': true
완전히 다른 의미일까요?
b) a)에 대한 응답을 기반으로, jinja 템플릿 파일의 중단 점이 작동해야하는 경우 현재 무시되는 것처럼 보이기 때문에 어떻게해야합니까?
감사합니다!
답변
먼저 Jinja Wikipedia 페이지 에서 예제를 시도했습니다 .
**jinja-test.py**
from jinja2 import Template
with open('example.html.jinja') as f:
tmpl = Template(f.read())
print tmpl.render(
variable = 'Value with <unsafe> data',
item_list = [1, 2, 3, 4, 5, 6]
)
**example.html.jinja**
<!DOCTYPE html>
<html>
<head>
<title>{{ variable|escape }}</title>
</head>
<body>
{%- for item in item_list %}
{{ item }}{% if not loop.last %},{% endif %}
{%- endfor %}
</body>
</html>
템플릿 파일의 언어 유형이로 설정되어 있는지 확인합니다 Jinja
. 그렇지 않으면 중단 점을 설정할 수 없습니다.
파일이 Jinja Template 클래스에 제공되기 전에 문자열로 읽 혔기 때문에 템플릿에 설정된 중단 점에 대한 링크가 없었습니다.
의 소스 코드를 읽기 jinja2.Template
I 것은 창조의 선호하는 방법이 발견 jinja2.Template
관통이다 jinja2.Environment
인스턴스입니다.
검색 후 Loader를 사용하여jinja2.Environment 다른 Jinja 사용 예제를 찾았습니다 .
**jinja-test-2.py**
FileSystemLoader 사용
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('.'))
# env = Environment(loader=FileSystemLoader('templates'))
tmpl = env.get_template('example.html.jinja')
print (tmpl.render(
variable = 'Value with <unsafe> data',
item_list = [1, 2, 3, 4, 5, 6]))
**jinja-test-2.py**
PackageLoader 사용
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('main', 'templates'))
tmpl = env.get_template('example.html.jinja')
print (tmpl.render(
variable = 'Value with <unsafe> data',
item_list = [1, 2, 3, 4, 5, 6]))
Jinja는 모듈 pkg_resources
을 사용하기 때문에 main/__init__.py
PackageLoader를 사용하는 경우 빈을 추가해야합니다 . 또는 예외가 발생합니다.
"Can't perform this operation for unregistered loader type"
이제 템플릿에 중단 점을 설정하고 응용 프로그램을 실행하면 디버거가 템플릿에서 중지되고 F10 키를 눌러 단계별로 진행할 수 있습니다.
템플릿 파일의 언어 유형이로 설정되어 있는지 확인합니다 Jinja
. 그렇지 않으면 중단 점을 설정할 수 없습니다.