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.