2013-02-12 3 views

risposta

24

Se entrambi gli elenchi sono della stessa lunghezza, è possibile restituire zipped_data = zip(table, total) come contesto del modello nella visualizzazione, che produce un elenco di tuple a 2 valori.

Esempio:

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

Nel modello, è possibile quindi scrivere:

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

Inoltre, dare un'occhiata a documentazione di Django sul tag for modello here. Mette in chiaro tutte le possibilità che hai per usarlo, compresi i buoni esempi.

+0

questa domanda mi è sembrata piuttosto facile, o piuttosto divertente. ma grazie a tutti quelli che hanno risposto! – mike

+2

@mike Non sei stupido. Tutti noi eravamo a questo punto qualche tempo fa quando imparavamo su Python e Django. E i documenti di Django non menzionano la funzione 'zip' di Python, quindi questa domanda è stata sicuramente utile. Sono contento di poterti aiutare. :) – pemistahl

2

Se è solo le variabili i e j che si sta guardando, allora questo dovrebbe funzionare -

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

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

(di credito a tutti gli altri che hanno risposto a questa domanda)

+0

conversione da un elenco a un dict e chiamando ordinato su di essa sarà probabilmente modificare l'ordine dei dati. – Jordan

+0

buon punto, ho aggiornato la mia risposta per semplicemente iterare lo zip. –

1

Invece di utilizzare un dizionario (che non garantisce alcun tipo di ordinamento), utilizzare la funzione python zip sui due elenchi e passarla al modello.

5

Utilizzare la funzione zip di Python e comprimere insieme le 2 liste.

Secondo lei:

zip(table, list) 

Nel modello, è possibile iterare questo come una semplice lista, e utilizzare le proprietà .0 e .1 di accedere ai dati da tavolo e la lista, rispettivamente.

1

Dovrai farlo nella vista: usa la funzione di zip integrata per creare un elenco di tuple, quindi eseguirne l'iterazione nel modello.

La logica dei modelli è volutamente semplice, qualsiasi cosa anche leggermente complessa dovrebbe essere eseguita nella vista.

+0

Questo è un grande e logico punto; notato. –

0

Per eventuali ultimi visitatori di questa domanda, forloop.parentloop può imitare la zippare di due liste insieme:

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