simpleTAL: filtern mit Python...

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 24. Oktober 2005, 17:54

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>

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 25. Oktober 2005, 08:39

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Dienstag 25. Oktober 2005, 10:40

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()

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 25. Oktober 2005, 11:30

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten