2012-04-03 9 views
2

Ich weiß nicht warum, aber in letzter Zeit die Tracebacks, die ich von Jinja Vorlage Rendering Fehler bekomme, sind mehr oder weniger vollständig bedeutungslos.Warum sind meine Jinja-Rückverfolgungen bedeutungslos?

Traceback (most recent call last): 
    File "/Users/me/my_project/app/distlib/tipfy/__init__.py", line 442, in wsgi_app 
    response = self.handle_exception(request, e) 
    File "/Users/me/my_project/app/distlib/tipfy/__init__.py", line 430, in wsgi_app 
    rv = self.dispatch(request) 
    File "/Users/me/my_project/app/distlib/tipfy/__init__.py", line 559, in dispatch 
    return handler(self, request)(method, **request.rule_args) 
    File "/Users/me/my_project/app/distlib/tipfy/__init__.py", line 165, in __call__ 
    response = method(*args, **kwargs) 
    File "/Users/me/my_project/app/my_package/admin/menus/editor.py", line 22, in get 
    return self.edit_week(menu, year, week_num, week_nums) 
    File "/Users/me/my_project/app/my_package/admin/menus/editor.py", line 44, in edit_week 
    return self.respond(data, context=ctx, template="admin/menus/edit.html") 
    File "/Users/me/my_project/app/my_package/lib/irender.py", line 182, in respond 
    return render(self, fmt, opts) 
    File "/Users/me/my_project/app/my_package/lib/irender.py", line 207, in __call__ 
    val = render_func(handler, **opts) 
    File "/Users/me/my_project/app/my_package/lib/irender.py", line 220, in render_html 
    return handler.render_template(self.template, ctx) 
    File "/Users/me/my_project/app/my_package/handlers.py", line 42, in render_template 
    return jinja2.get_template(template).render(accum) 
    File "/Users/me/my_project/app/distlib/jinja2/environment.py", line 894, in render 
    return self.environment.handle_exception(exc_info, True) 
    File "/Users/me/my_project/app/templates/admin/menus/edit.html", line 3, in top-level template code 
    {% import "admin/utils.html" as utils %} 
TypeError: integer argument expected, got float 

Natürlich kann ich ableiten, wo der tatsächliche Fehler ist von den meisten der Vorlage zu entfernen und zu sehen, wenn der Fehler auftritt beginnt, aber das ist eine dumme Entwicklung Methode.

Wie mache ich die Tracebacks wieder nützlich?

By the way, habe ich folgende Beschwörung in meinem main.py:

def whitelist_jinja2_debug_modules(): 
    from google.appengine.tools.dev_appserver import HardenedModulesHook 
    HardenedModulesHook._WHITE_LIST_C_MODULES += ['_ctypes', 'gestalt'] 

if app.dev: 
    whitelist_jinja2_debug_modules() 
+1

Es stellte sich heraus, dass das Problem in einer Vorlage war, die über '{% import ...%}', die fehlerhafte Zeile importiert wurde war '{% für Basis im Bereich (52/13)%}' - die Frage bleibt jedoch noch. – lericson

+0

Setzen Sie Ihre Berechnungen in Python-Code statt einer Vorlage? – geoffspear

+0

Scheint wie ein kurzsichtiger Ansatz für das Design der Benutzeroberfläche. – lericson

Antwort

0

Auch wenn diese Frage ziemlich alt ist bereits die Antwort leicht verfügbar ist (und nicht zur gleichen Zeit). Um richtige Stacktraces in Jinja zu bekommen, braucht man Ctypes, die lange nicht in der Google App Engine verfügbar waren. Ich bin nicht ganz sicher über den aktuellen Status, aber diese Frage hat einige Lösungen für Sie: Debug Jinja2 in Google App Engine

Verwandte Themen