Ich versuche, Jinja2 's auseinanderzunehmen TemplateSyntaxError
um zu sehen, warum es nicht den genauen Dateinamen angibt, in dem ein Syntaxfehler gefunden wird
Ich führe diesen Fehler absichtlich in eine Untervorlage ein, um zu versuchen, dieses Schablonensystem besser zu verstehen. Nachdem ich den Syntaxfehler erhalten habe, sehe ich File "<unknown>", line 4, in template
in meinem Flask-Preview-Server. Die Zeilennummer ist korrekt, aber der Debugger scheint verwirrt über die Datei zu sein, aus der das Problem stammt. Ich bin noch nicht sicher, wie der Name des Code-Objekts lautet. template
repräsentiert.
Wie jemand darauf hingewiesen hat, das <unknown>
wird hier als Wegwerf verwendet, wenn der Dateiname des Code-Objekts NULL ist. Nach dem Lesen einer wenige Verweise Für Code-Objekte habe ich noch nicht das Glück gehabt, meinen Kopf um diese Verrückung zu legen.
Jemand scheint einen ähnlichen Fehler zu bekommen dieses GitHub Problem.
Antworten:
1 für die Antwort № 1Kann es sein, dass es nur ein beliebiger Wert ist, der von Jinja2 für einen dynamisch generierten Code bereitgestellt wird?
>>> code = compile("print("test")", "<unknown>", "exec")
>>> code
<code object <module> at 0x1064b6e30, file "<unknown>", line 1>
>>> exec code
test
>>> code.co_filename
"<unknown>"
Und da scheint es tatsächlich in zu sein jinja2 / debug.py - translate_syntax_error.
Die Erklärung, warum das so ist, ist ziemlich einfach. Die ganze Maschine, angefangen mit flask.render_template_string
durch jinja2.Environment.from_string
Bis auf Jinja2-Ausnahmebehandler gibt es keine Bedenken hinsichtlich des Ursprungs der übergebenen Vorlagenzeichenfolge.
Es wäre zwar möglich, noch mehr zu tunnelnInformationen von oben, was wäre der Vorteil davon? Im Ausnahmefall erhalten Sie eine vollständige Stack-Ablaufverfolgung mit entsprechenden lokalen Informationen, die auf jeder Ebene verfügbar sind, einschließlich der Position, an der Sie die Zeichenfolge übergeben haben, und der Zeilennummer in der fehlerhaften Vorlagenzeichenfolge, z.
File "jinja2-uknown-filename.py", line 7, in index
return flask.render_template_string("this is a n n {% test %}")
...
File "<unknown>", line 3, in template
TemplateSyntaxError: Encountered unknown tag "test".