Debugging template Jinja2 di VSCode
Jadi saya menemukan "jinja: "true"opsi untuk launch.json dan mencoba membuat debugging jinja berfungsi, sejauh ini tidak berhasil.
Launch.json saya saat ini:
{
"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
}
] }
Saya menghadapi masalah karena saya tidak dapat mengatur breakpoint di file template jinja, tetapi menyelesaikannya dengan menambahkan "debug.allowBreakpointsEverywhere": trueke pengaturan vscode.
Pertanyaan saya adalah sebagai berikut:
a) Bagaimana cara kerja template debugging? Saya menambahkan breakpoint di mana saja di template dan eksekusi berhenti di situ? Atau mungkin ini 'jinja': trueberarti sesuatu yang sama sekali berbeda?
b) Berdasarkan respon pada a), jika breakpoint dalam file template jinja bisa berfungsi, bagaimana membuat ini terjadi, karena saat ini sepertinya breakpoint tersebut diabaikan?
Terima kasih banyak!
Jawaban
Pertama saya mencoba contoh di halaman Wikipedia Jinja
**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>
Pastikan jenis bahasa file template diatur ke Jinja. Jika tidak, Anda tidak dapat mengatur breakpoint.
Karena file telah dibaca menjadi string sebelum diberikan ke kelas Template Jinja, tidak ada link ke set breakpoint pada template.
Membaca kode sumber jinja2.Templatesaya menemukan bahwa cara yang disukai untuk membuat jinja2.Templateadalah melalui jinja2.Environmentinstance.
Setelah pencarian, saya menemukan contoh penggunaan Jinjajinja2.Environment lainnya di SO menggunakan Loader .
**jinja-test-2.py** menggunakan 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** menggunakan 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]))
Karena Jinja menggunakan modul, pkg_resourcesAnda harus menambahkan yang kosong main/__init__.pyjika Anda menggunakan PackageLoader. Atau Anda mendapatkan Pengecualian
"Can't perform this operation for unregistered loader type"
Saat Anda sekarang menyetel breakpoint di template dan menjalankan aplikasi, debugger berhenti di template dan Anda dapat melanjutkan dengan F10.
Pastikan jenis bahasa file template diatur ke Jinja. Jika tidak, Anda tidak dapat mengatur breakpoint.