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テンプレートファイルのブレークポイントが機能する必要がある場合、現在は無視されているように見えるので、これを実現するにはどうすればよいですか?
どうもありがとう!
回答
まず、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.Template
Iは作成の好ましい方法は、ことが判明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
。そうしないと、ブレークポイントを設定できません。