VSCode에서 Jinja2 템플릿 디버깅

Aug 21 2020

그래서 "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": truevscode 설정에 추가 하여 해결했습니다 .

내 질문은 다음과 같습니다.
a) 디버깅 템플릿은 어떻게 작동해야합니까? 템플릿의 아무 곳에 나 중단 점을 추가하면 실행이 중지됩니까? 아니면 'jinja': true완전히 다른 의미일까요?
b) a)에 대한 응답을 기반으로, jinja 템플릿 파일의 중단 점이 작동해야하는 경우 현재 무시되는 것처럼 보이기 때문에 어떻게해야합니까?

감사합니다!

답변

2 rioV8 Aug 26 2020 at 19:40

먼저 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.TemplateI 것은 창조의 선호하는 방법이 발견 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__.pyPackageLoader를 사용하는 경우 빈을 추가해야합니다 . 또는 예외가 발생합니다.

"Can't perform this operation for unregistered loader type"

이제 템플릿에 중단 점을 설정하고 응용 프로그램을 실행하면 디버거가 템플릿에서 중지되고 F10 키를 눌러 단계별로 진행할 수 있습니다.

템플릿 파일의 언어 유형이로 설정되어 있는지 확인합니다 Jinja. 그렇지 않으면 중단 점을 설정할 수 없습니다.