2012-06-06 14 views
9

Używam aplikacji Jinja2 w Google App Engine. Mam ListView, który renderuje ogólny szablon. W tej chwili nie jestem pewien, co dokładnie chcę wyświetlić, więc po prostu chcę wyświetlić każdy atrybut modelu.Iteracja nad obiektem w Jinja2?

Czy istnieje sposób iteracji obiektu w celu wyprowadzenia każdego z nich w komórce tabeli?

Na przykład:

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

Wszelkie porady mile widziane. Dzięki

Odpowiedz

3

to załatwi w prostego kodu Pythona:

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

można umieścić getattr funkcję w kontekście tak można nazwać to w jinja2 jak pokazano poniżej:

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

Nie należy przypisywać "getattr" do kontekstu jinja, ale użyć "dict jak" składni. Sprawdź moją odpowiedź powyżej. Myślę, że ta odpowiedź nie jest poprawna. – Metal3d

23

Zestaw getattr w kontekście jest złym pomysłem (i jest już wbudowany filtr attr). Jinja2 zapewnia dict like dostęp do właściwości.

Chyba powinieneś zrobić:

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

To jest lepsze ...

+0

To nie działa niestety – lopezdp

+0

Nawet z attr? – Metal3d

+0

Skończyło się na tym, że użyłem loop.changed, ponieważ wszystko, co musiałem zrobić, to sprawdzić, czy to się zmieniło, więc prawdopodobnie nadłożyłem komplikacje, próbując wykorzystać twoje podejście. Może użyłem niewłaściwego narzędzia, więc moje programowanie nie działało ...;) – lopezdp