Seite 1 von 1

jinja - attr einer hashablen variable beantragen

Verfasst: Mittwoch 5. September 2007, 20:54
von Costi
mein traceback sieht folgendermassen aus:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/lib/python2.5/site-packages/cherrypy/_cprequest.py", line 551, in respond
    cherrypy.response.body = self.handler()
  File "/usr/lib/python2.5/site-packages/cherrypy/_cpdispatch.py", line 24, in __call__
    return self.callable(*self.args, **self.kwargs)
  File "/home/kirsch/Desktop/domino/main.py", line 131, in login
    return render_last_tmpl(login_failed=True)
  File "/home/kirsch/Desktop/domino/main.py", line 46, in render_last_tmpl
    return render(tmpl_name, **name_space)
  File "/home/kirsch/Desktop/domino/main.py", line 37, in render
    return tmpl.render(kwargs)
  File "/usr/lib/python2.5/site-packages/Jinja-1.1-py2.5-linux-i686.egg/jinja/translators/python.py", line 110, in render
    self._debug(ctx, *sys.exc_info())
  File "/usr/lib/python2.5/site-packages/Jinja-1.1-py2.5-linux-i686.egg/jinja/utils.py", line 368, in fake_template_exception
    exec code in globals, namespace
  File "jinja://base.html", line 37, in <module>
    {{ else }}
OperationalError: no such column: islogedin
und zwar ist hier wohl die variable ``user`` hashable, in diesen fall will ich aber auf dem attribut "islogedin" zugreifen....

....sofern ich davon ausgehe, dass hier nicht "{{ else }}" in zeile 37, sondern
eigentlich zeile 34, "{{if user.islogedin()}} " gemeint ist!

Verfasst: Donnerstag 6. September 2007, 17:32
von mitsuhiko
Der Debugger ist in der SVN Version verbessert und kann auf sowas reagieren. Du kannst mal dem Enviornment mit "enable_friendly_tracebacks=False" den debug rewriter ausschalten und mal sehen wo der Fehler im Original auftaucht.

Verfasst: Donnerstag 6. September 2007, 19:13
von birkenfeld
BTW, ist `{{ else }}` kein Syntaxfehler?

Verfasst: Donnerstag 6. September 2007, 19:27
von Costi
nein, mann kan ja in jinja sich den syntax im ``Enviroment`` definieren :wink:

EDIT:
aber mein problem ist eher, dass ich den attribut "islogedin" und nicht den key will

Verfasst: Donnerstag 6. September 2007, 19:44
von mitsuhiko
Costi hat geschrieben:EDIT:
aber mein problem ist eher, dass ich den attribut "islogedin" und nicht den key will
Tja. Deine Klasse wirft einen OperationalError. Jinja verlangt, dass __getitem__ einen KeyError oder keinen wirft und __getattr(ibute)__ einen AttributeError.

Verfasst: Donnerstag 6. September 2007, 19:57
von Costi
hmmm, thx
ich mach dan einfach eine ``ResultThrowingKeyErrors`` classe
is zwar nicht besonders schoen aber egal

Verfasst: Freitag 7. September 2007, 07:27
von Costi
oder noch besser:

ich mach einfach aus meinem TurboXML[1] eine mini templating engine :lol:



[1] http://www.python-forum.de/topic-11875.html

Verfasst: Freitag 7. September 2007, 11:26
von Leonidas
Costi hat geschrieben:ich mach einfach aus meinem TurboXML[1] eine mini templating engine :lol:
Sowas ähnliches gibt es schon, nennt sich Breve und lehnt sich an Nevow Stan an.