2016-04-07 10 views
0

Bir Django bağlam sözlüğünü şablona zorlamaya çalışıyorum.Django bağlamı için bir sözlükte tuple değerlerini yineleyin

ben şarkılar için değerlerin bir grup var ve bu yüzden gibi tanımlama grubu değerleri ile bir sözlük oluşturulur:

songs = {'titles': ('Hello', 'Umbrella'), 'artists': ('Adele', 'Rihanna')} 

çıkışına ben döngü bunu nasıl

Hello 
Adele 

Umbrella 
Rihanna 

Veya belki de yeniden düşünmek gerekir benim bağlam sözlük kurulumu

+0

sözlükleri keyfi düzen var gibi, "Merhaba", "Adele" ve "Şemsiye" Önceden ne mantık tarafından bize gerekecek "Rihanna'dan" önce gelir. – timgeb

+0

@timgeb: Çünkü tupeller kendilerine sipariş verilir. Başlıklar sanatçılardan önce gelir ve her başlık bir öncekinden önce gelir. – zondo

+0

@zondo oh, sözlüğün daha fazla tuşa sahip olabileceğini varsayıyordum ve bu sadece örnek bir taslaktı. Nevermind, eğer sadece bu iki anahtara sahipse, sipariş belirlenir. – timgeb

cevap

0

senin görünümünde:

titles = ('Hello', 'Umbrella') 
artists = ('Adele', 'Rihanna') 
songs = {'titles_artists': zip(titles, artist)} 

Şablonunuzdaki:

{% for title, artist in titles_artists %} 
    <p>{{ title }}<br>{{ artist }}</p> 
{% endfor %} 

Sen bağlam sözlüğünü yeniden düşünmek deneyebilirsiniz, gibi bir şey:

songs = {'artists': [ 
         {'name': 'Adele', 'titles': ['Hello', ]}, 
         {'name': 'Rihanna', 'titles': ['Umbrella', ]} 
        ] 
     } 

Ve şablonunda:

{% for artist in artists %} 
    {% for title in artist.titles %} 
     {{ title }} 
    {% endfor %} 
    {{ artist.name }} 
{% endfor %} 
+0

Ya bu benim aradığım şeyden daha fazlası! Teşekkür ederim! – TimeBigot

1

yapın:

for title, artist in zip(songs['titles'], songs['artists']): 
    print(title) 
    print(artist) 
    print() # In Python 2, remove the parentheses 
+0

Sen bir tanrısalsın. Çok teşekkürler! – TimeBigot