Seite 1 von 1

simpleTAL: filtern mit Python...

Verfasst: Montag 24. Oktober 2005, 17:54
von jens
Hier mal ein dummes Beispiel, welches so leider nicht funktioniert :( Es soll eigentlich die Nr. 67 ausgelassen werden, aber "no" hat wohl keinen Wert zugewiesen bekommen :(

Was läuft da falsch?

Code: Alles auswählen

import sys
import simpleTAL, simpleTALES

template = """
<div tal:repeat="data example" tal:omit-tag="">
<span tal:define="no repeat/data/no" tal:condition="python:no != 67">
    <p tal:content="python:str(no)"></p>
    <p tal:content="string:${data/no} - ${data/char}"></p>
</span>
</div>
"""
data = [{"char":chr(i),"no":i} for i in range(65, 70)]

context = simpleTALES.Context(allowPythonPath=1)
context.addGlobal("example", data)

template = simpleTAL.compileHTMLTemplate(template)
template.expand(context, sys.stdout)
Ausgaben:
<span>
<p>None</p>
<p>65 - A</p>
</span>

<span>
<p>None</p>
<p>66 - B</p>
</span>

<span>
<p>None</p>
<p>67 - C</p>
</span>

<span>
<p>None</p>
<p>68 - D</p>
</span>

<span>
<p>None</p>
<p>69 - E</p>
</span>

Re: simpleTAL: filtern mit Python...

Verfasst: Dienstag 25. Oktober 2005, 08:39
von gerold
jens hat geschrieben:Hier mal ein dummes Beispiel, welches so leider nicht funktioniert :( Es soll eigentlich die Nr. 67 ausgelassen werden, aber "no" hat wohl keinen Wert zugewiesen bekommen :(
Was läuft da falsch?
Hi Jens!

Das ist wirklich leicht zu übersehen. Die Zeile müsste so aussehen.

Code: Alles auswählen

<span tal:define="no data/no" tal:condition="python:no != 67">
repeat/liste/foo brauchst du nur um den Index, Even, Odd oder andere Informationen über eine Datenzeile heraus zu bekommen.

Die Zeile könnte aber auch so aussehen:

Code: Alles auswählen

<span tal:condition="python:data['no'] != 67">
lg
Gerold
:-)

Verfasst: Dienstag 25. Oktober 2005, 10:40
von jens
Super, beide Varianten funktionieren:

Code: Alles auswählen

import sys
import simpleTAL, simpleTALES

template = """
<div tal:repeat="data example" tal:omit-tag="">
<span tal:define="no data/no" tal:condition="python:no != 67">
    <p tal:content="python:str(no)"></p>
    <p tal:content="string:${data/no} - ${data/char}"></p>
</span>
</div>
"""
data = [{"char":chr(i),"no":i} for i in range(65, 70)]

context = simpleTALES.Context(allowPythonPath=1)
context.addGlobal("example", data)

template = simpleTAL.compileHTMLTemplate(template)
template.expand(context, sys.stdout)

print " -"*40

template = """
<div tal:repeat="data example" tal:omit-tag="">
<span tal:condition="python:data['no'] != 67">
    <p tal:content="string:${data/no} - ${data/char}"></p>
</span>
</div>
"""
data = [{"char":chr(i),"no":i} for i in range(65, 70)]

context = simpleTALES.Context(allowPythonPath=1)
context.addGlobal("example", data)

template = simpleTAL.compileHTMLTemplate(template)
template.expand(context, sys.stdout)
Übrigends hab ich mir einfach schnell mal eine eigene logging.py geschrieben, damit ich Fehler richtig sehen kann:

Code: Alles auswählen

class DummyLogger:
    def debug (self, *args): pass
    def info (self, *args): pass

    def warn (self, *args):
        print args

    def error (self, *args):
        print args

    def critical (self, *args):
        print args

def getLogger (*params):
    return DummyLogger()

Verfasst: Dienstag 25. Oktober 2005, 11:30
von gerold
jens hat geschrieben:Super, beide Varianten funktionieren:
[...]
Übrigends hab ich mir einfach schnell mal eine eigene logging.py geschrieben, damit ich Fehler richtig sehen kann
Hi Jens!
So einen Logger braucht man unbedingt. Sonst ist man bei der Fehlersuche eine arme Sau.

lg
Gerold
:-)