Debuggen von Jinja2-Vorlagen in VSCode
Also habe ich die "jinja: "true"Option für launch.json gefunden und versuche, das Jinja-Debugging zum Laufen zu bringen, bisher erfolglos.
Meine launch.json ist derzeit:
{
"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
}
] }
Ich hatte ein Problem, bei dem ich keine Haltepunkte in der Jinja-Vorlagendatei einrichten konnte, aber es durch Hinzufügen "debug.allowBreakpointsEverywhere": truezu vscode-Einstellungen gelöst habe.
Meine Fragen lauten wie folgt:
a) Wie soll die Debugging-Vorlage funktionieren? Ich füge irgendwo in der Vorlage einen Haltepunkt hinzu und die Ausführung stoppt dort? Oder 'jinja': truebedeutet das vielleicht etwas ganz anderes?
b) Basierend auf der Antwort auf a), wenn Haltepunkte in der Jinja-Vorlagendatei funktionieren sollten, wie kann dies geschehen, da sie derzeit anscheinend einfach ignoriert werden?
Vielen Dank!
Antworten
Zuerst habe ich das Beispiel auf der Jinja-Wikipedia-Seite ausprobiert
**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>
Stellen Sie sicher, dass der Sprachtyp der Vorlagendatei auf eingestellt ist Jinja. Andernfalls können Sie keine Breakpoints setzen.
Da die Datei in eine Zeichenfolge gelesen wurde, bevor sie an die Jinja-Vorlagenklasse übergeben wurde, gab es keinen Link zu dem in der Vorlage festgelegten Haltepunkt.
Beim Lesen des Quellcodes von jinja2.Templatehabe ich festgestellt, dass die bevorzugte Methode zum Erstellen von a jinja2.Templateüber die jinja2.EnvironmentInstanz erfolgt.
Nach einer Suche fand ich ein weiteres Jinja-Anwendungsbeispiel auf SO mit dem jinja2.Environmenta Loader .
**jinja-test-2.py**mit einem 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**mit einem 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]))
Da Jinja das Modul verwendet pkg_resources, müssen Sie ein Leerzeichen hinzufügen, main/__init__.pywenn Sie den PackageLoader verwenden. Oder Sie erhalten eine Ausnahme
"Can't perform this operation for unregistered loader type"
Wenn Sie nun einen Haltepunkt in der Vorlage setzen und die Anwendung ausführen, stoppt der Debugger in der Vorlage und Sie können mit F10 durchgehen.
Stellen Sie sicher, dass der Sprachtyp der Vorlagendatei auf eingestellt ist Jinja. Andernfalls können Sie keine Breakpoints setzen.