mini templating system
Verfasst: Montag 9. Juli 2007, 01:33
bin im moment etwas muede und das ding wurde nur rudimentaer getestet (-;
wie auch immer:
es handelt sich eine kompakte, flexible templating language:
hier ein beispiel:
wird compiliert in python code:
und dass sendet (je nachdem was `write` macht) schlieslich folgendes an dem browser:
und hier schlieslich mein code:
wie auch immer:
es handelt sich eine kompakte, flexible templating language:
hier ein beispiel:
Code: Alles auswählen
==def create_form():
<form href=test>
==for i in range(10):
feld nr {i+1} <input name={i}> <br />
<hr />
==end
</form>
==end
==create_form()
Code: Alles auswählen
def create_form():
write('''
<form href=test>
''')
for i in range(10):
write('''
feld nr ''' + str(i+1) + ''' <input name=''' + str(i) + '''> <br />
<hr />
''')
write('''
</form>
''')
create_form()
Code: Alles auswählen
<form href=test>
feld nr 1 <input name=0> <br />
<hr />
feld nr 2 <input name=1> <br />
<hr />
feld nr 3 <input name=2> <br />
<hr />
feld nr 4 <input name=3> <br />
<hr />
feld nr 5 <input name=4> <br />
<hr />
feld nr 6 <input name=5> <br />
<hr />
feld nr 7 <input name=6> <br />
<hr />
feld nr 8 <input name=7> <br />
<hr />
feld nr 9 <input name=8> <br />
<hr />
feld nr 10 <input name=9> <br />
<hr />
</form>
Code: Alles auswählen
stri = """
==def create_form():
<form href=test>
==for i in range(10):
feld nr {i+1} <input name={i}> <br />
<hr />
==end
</form>
==end
==create_form()
"""
class Indent:
def __init__(self, indent=' '):
self.indent = indent
self.data = ''
self.level = 0
def up(self):
self.level += 1
def down(self):
self.level -= 1
def write(self, stri):
for line in stri.splitlines():
self.data += self.level*self.indent + line + '\n'
def __str__(self):
return self.data
def mk_vars(stri):
"""
ersetzt "helo {user}" mit "helo ''' + user + '''"
"""
retval = ''
recording = False
for char in stri:
if char == '{':
retval += "''' + str("
elif char == '}':
stack = ''
retval += ") + '''"
else:
retval += char
return retval
i = Indent()
prev_statement = True
for line in stri.splitlines():
line = line.strip()
if not line:
continue
if line.startswith('=='):
if not prev_statement:
i.write("''')")
prev_statement = True
line = line[2:]
if line == 'end':
i.down()
else:
i.write(line)
i.up()
else:
if prev_statement:
i.write("write('''")
i.write(mk_vars(line))
prev_statement = False
print i