2012-06-06 16 views
9

Ich verwende Jinja2 auf Google App Engine. Ich habe eine ListView, die eine generische Vorlage rendert. Im Moment bin ich nicht sicher, was genau ich anzeigen möchte, also möchte ich nur jedes Attribut des Modells anzeigen.Iterate über Objekt in Jinja2?

Gibt es eine Möglichkeit, über das Objekt zu iterieren, um jedes in einer Tabellenzelle auszugeben?

Zum Beispiel:

{% for record in records %} 
<tr> 
{% for attribute in record %} 
<td>{{ attribute }}</td> 
{% endfor %} 
</tr> 
{% endfor %} 

Jede Beratung sehr geschätzt. Dank

Antwort

3

Dadurch wird der Trick in einfachen Python-Code tun:

for attribute in record.properties(): 
    print '%s: %s' % (attribute, getattr(record, attribute)) 

Sie die getattr Funktion im Kontext setzen können, so dass Sie es in jinja2 nennen kann, wie unten dargestellt:

{% for record in records %} 
    <tr> 
    {% for attribute in record.properties() %} 
     <td>{{ getattr(record, attribute) }}</td> 
    {% endfor %} 
    </tr> 
{% endfor %} 
+3

Sie sollten nicht "getattr" zu jinja Kontext zuordnen, aber die "dict wie" Syntax. Bitte überprüfe meine Antwort oben. Ich denke, diese Antwort ist nicht korrekt. – Metal3d

23

Set getattr im Kontext ist eine schlechte Idee (und es gibt bereits den eingebauten Filter attr). Jinja2 bietet dict like Zugriff auf Eigenschaften.

Ich denke, Sie tun sollten:

{% for record in records %} 
    <tr> 
    {% for attribute in record.properties() %} 
     <td>{{ record[attribute] }}</td> 
    {% endfor %} 
    </tr> 
{% endfor %} 

Das ist besser ...

+0

Das funktioniert leider nicht – lopezdp

+0

Auch mit attr? – Metal3d

+0

Am Ende habe ich loop.change verwendet, da ich nur nachsehen musste, ob sich das geändert hat, also war es wahrscheinlich so, dass ich mein Leben dadurch verkompliziert habe, dass ich versucht habe, deinen Ansatz zu verwenden. Vielleicht habe ich nur das falsche Werkzeug benutzt, also hat meine Programmierung nicht funktioniert ...;) – lopezdp