Frage

Ich verwende das Jinja2 -Vorlagensystem in Django. Es ist sehr schnell und ich mag es sehr. Trotzdem habe ich ein Problem, Vorlagen zu debuggen: Wenn ich einige Fehler in eine Vorlage mache (schlechtes Tag, schlechtes Filtername, schlechtes Ende des Blocks ...), habe ich überhaupt nicht alle Informationen zu diesem Fehler.

In einer Django -Ansicht schreibe ich beispielsweise Folgendes:

from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('main', 'templates'))

def jinja(req):
    template = env.get_template('jinja.html')
    output=template.render(myvar='hello')
    return HttpResponse(output)

Ich schreibe eine Jinja2 -Vorlage: Jinja.html:

{{myvar|notexistingfilter()}} Jinja !

Beachten Sie, dass ich absichtlich einen nicht vorhandenen Filter einsetze, um einen Fehler zu generieren:

Ich erwartete so etwas wie "Notizingingfilter () nicht definiert", aber ich bekam nur ein einfaches Schwarz für weißes Traceback (nicht die übliche Django -Debug -Nachricht):

Traceback (most recent call last):

  File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 279, in run

    self.result = application(self.environ, self.start_response)

  File "/usr/local/lib/python2.6/dist-packages/django/core/servers/basehttp.py", line 651, in __call__
    return self.application(environ, start_response)


  File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/wsgi.py", line 241, in __call__
    response = self.get_response(request)

  File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 134, in get_response

    return self.handle_uncaught_exception(request, resolver, exc_info)

  File "/usr/local/lib/python2.6/dist-packages/django/core/handlers/base.py", line 154, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)


  File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 40, in technical_500_response
    html = reporter.get_traceback_html()

  File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 84, in get_traceback_html

    self.get_template_exception_info()

  File "/usr/local/lib/python2.6/dist-packages/django/views/debug.py", line 117, in get_template_exception_info
    origin, (start, end) = self.exc_value.source



TypeError: 'Template' object is not iterable

Ich erhalte nicht den Vorlagen -Dateinamen, bei dem der Fehler aufgetreten ist, keine Informationen über den Fehler selbst. Daher ist es sehr schwierig, Jinja2 zu debuggen.

Was sollte ich tun, um mehr Debug -Informationen zu haben und herauszufinden, wo sich ein Fehler in einer Jinja2 -Vorlage befindet?

Danke im Voraus,

War es hilfreich?

Lösung

Nach weiteren Test fand ich die Antwort:

Durch den gleichen Vorlagentest direkt unter Python, ohne Django zu verwenden, sind Debug -Nachrichten vorhanden. Also kommt es von Django.

Das Fix befindet sich in Einstellungen.

Andere Tipps

Aus der Jinja2 -Dokumentation:

Meine Tracebacks sehen komisch aus. Was ist los?

Wenn das Beschleunigungsmodul nicht kompiliert wird und Sie eine Python -Installation ohne CTYPES (Python 2.4 ohne CTYPES, Jython oder Google AppEngine) verwenden, kann Jinja2 keine korrekten Debugging -Informationen bereitstellen, und das Trackback kann unvollständig sein. Derzeit gibt es für Jython oder die AppeGine keine gute Problemumgehung, da CTYPES dort nicht verfügbar ist und es nicht möglich ist, die Verlängerung der Beschleunigung zu verwenden.

http://jinja.pocoo.org/2/documentation/faq#my-tracebacks-look-weird-what-happening

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top