2013-02-12 15 views

Antwort

24

Wenn beide Listen die gleiche Länge haben, können Sie zipped_data = zip(table, total) als Vorlagenkontext in Ihrer Ansicht zurückgeben, wodurch eine Liste von 2-wertigen Tupeln erstellt wird.

Beispiel:

>>> lst1 = ['a', 'b', 'c'] 
>>> lst2 = [1, 2, 3] 
>>> zip(lst1, lst2) 
[('a', 1), ('b', 2), ('c', 3)] 

in Ihrer Vorlage können Sie dann schreiben:

{% for i, j in zipped_data %} 
    {{ i }}, {{ j }} 
{% endfor %} 

Werfen Sie auch einen Blick auf Djangos Dokumentation über den for Template-Tag here. Es erwähnt alle Möglichkeiten, die Sie für die Verwendung haben, einschließlich schöner Beispiele.

+0

diese Frage schien eher einfach, oder eher dum. Aber danke an alle, die geantwortet haben! – mike

+2

@mike Sie sind nicht dumm. Wir alle waren vor einiger Zeit an diesem Punkt, als wir etwas über Python und Django lernten. Und Djangos Dokumente erwähnen Pythons 'zip'-Funktion nicht, also war diese Frage definitiv nützlich. Ich bin froh, dass ich dir helfen konnte. :) – pemistahl

2

Wenn es nur die Variablen i und j, die Sie betrachten dann sollte diese Arbeit -

return render_to_response('results.html', 
    {'data': zip(table, list)}) 

{% for i, j in data %} 
    <tr> 
     <td> {{ i }}: </td> <td> {{ j }} </td> 
    </tr> 
{% endfor %} 

(Kredit sonst an alle, die diese Frage beantwortet haben)

+0

zu einem dict aus einer Liste konvertieren und auf sie sortiert calling wird die Sortierreihenfolge der Daten wahrscheinlich ändern. – Jordan

+0

guten Punkt, ich habe meine Antwort aktualisiert, um einfach den Reißverschluss zu iterieren. –

1

Anstatt ein Wörterbuch mit (was keine Sortierung garantiert), verwenden Sie die Funktion python zip in den beiden Listen und übergeben Sie sie an die Vorlage.

5

Verwenden Sie die Zip-Funktion von Python und zippen Sie die 2 Listen zusammen.

Ihrer Ansicht:

zip(table, list) 

in Ihrer Vorlage, können Sie dies wie eine einfache Liste iterieren, und verwenden Sie die 0,0 und 0,1 Eigenschaften, um die Daten aus der Tabelle und Liste zuzugreifen, respectively.

1

Sie müssen dies in der Ansicht tun - verwenden Sie die eingebaute Zip-Funktion, um eine Liste von Tupeln zu erstellen, dann iterieren Sie darüber in der Vorlage.

Template-Logik ist absichtlich einfach, alles, was auch nur ein bisschen komplex sollte in der Ansicht erfolgen.

+0

Dies ist ein großer und logischer Punkt; bemerkt. –

0

Für alle Besucher auf diese Frage, die das Zuziehen von zwei Listen forloop.parentloop zusammen imitieren:

{% for a in list_a %}{% for b in list_b %} 
    {% if forloop.counter == forloop.parentloop.counter %} 
     {{a}} {{b}} 
    {% endif %} 
{% endfor %}{% endfor %} 
Verwandte Themen