Hilfe mit exec bei Anpassung von Template Library stpy
Verfasst: Dienstag 26. August 2008, 01:10
Hallo alle,
Ich benutze eine kleine template library Names [url=gttp://lucumr.pocoo.org/articles/simple-templates-in-python]stpy[/url] um HTML auszugeben.
Eine Kleinigkeit würde ich gerne anpassen:
Exisitiert eine im template verwendete Variable nicht, soll das Ganze nicht mit einem Attribute- bzw KeyError abgebrochen werden, stattdessen soll einfach "" (leerer string) ausgegeben werden, damit der Rest des Templates ordnungsgemäß dargestellt werden kann.
Leider stellt sich das nicht so einfach dar wie zuerst angenommen; der Quelltext von stpy findet sich hier http://dev.pocoo.org/hg/sandbox/diff/a4 ... py/stpy.py
Was ich versucht habe, ist das anpassen von render(), Zeile 110-160.
Mein erster Versuch war, das Werte-Dictionary wie folgt zu erweitern:
Damit wollte ich erzielen, dass wenn der Key nicht im Dictionary vorliegt, dass einfach ein leerer String zurückgegben wird, das ganze resultiert jedoch in einem
aber auch hier die gleiche Meldung:
Ich scheine also irgendwie das Konzept von exec () nicht zu verstehen, und so langsam gehen mir auch die Ideen aus, das Problem zu lösen.
Ich wäre wirklich dankbar, wenn mir jemand weiterhelfen würde. Danke.
Ich benutze eine kleine template library Names [url=gttp://lucumr.pocoo.org/articles/simple-templates-in-python]stpy[/url] um HTML auszugeben.
Eine Kleinigkeit würde ich gerne anpassen:
Exisitiert eine im template verwendete Variable nicht, soll das Ganze nicht mit einem Attribute- bzw KeyError abgebrochen werden, stattdessen soll einfach "" (leerer string) ausgegeben werden, damit der Rest des Templates ordnungsgemäß dargestellt werden kann.
Leider stellt sich das nicht so einfach dar wie zuerst angenommen; der Quelltext von stpy findet sich hier http://dev.pocoo.org/hg/sandbox/diff/a4 ... py/stpy.py
Was ich versucht habe, ist das anpassen von render(), Zeile 110-160.
Mein erster Versuch war, das Werte-Dictionary wie folgt zu erweitern:
Code: Alles auswählen
class D(dict):
def __getitem__(self, key):
if not self.has_key(key):
self.update({key:''})
return super(D, self).__getitem__(key)
d = D(*args, **kwargs)
Mein zweiter Versuch war, die lokalen variablen des code objekts abzufragen, und falls diese nicht im Werte-Dictionary vertreten sind, auf '' zu setzen.File "<template>", line 7, in <module>
TypeError: 'str' object is not callable
Code: Alles auswählen
for var in self.code.co_names:
if var not in d:
d[var] = ''
File "<template>", line 7, in <module>
TypeError: 'str' object is not callable
Ich scheine also irgendwie das Konzept von exec (
Code: Alles auswählen
exec self.code in d
Ich wäre wirklich dankbar, wenn mir jemand weiterhelfen würde. Danke.