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

まず、JinjaWikipediaページで例を試しました

**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インスタンス。

検索した後、ローダーを使用してSOで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はモジュールを使用するため、PackageLoaderを使用する場合pkg_resourcesは空を追加する必要がありmain/__init__.pyます。または、例外が発生します

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

テンプレートにブレークポイントを設定してアプリケーションを実行すると、デバッガーはテンプレートで停止し、F10でステップスルーできます。

テンプレートファイルの言語タイプがに設定されていることを確認してくださいJinjaそうしないと、ブレークポイントを設定できません。