2013-07-29 56 views
4

我有我的視圖中的標籤列表和值列表,其中第一個列表中的第n個元素對應於第二個列表中的第n個元素,我想按順序顯示它們我的模板,在列表或一個選項卡,例如:django模板中的元組列表

- label1 : text1 
- label2 : text2 .. 

要做到這一點,我拉上了兩個列表:

labels = [] 
texts = [] 
#function that fills the lists. 
values = zip(labels,results) 
context = {'values': values } 
return render(request,'mypage.html',context) 

然後在我的模板,我已經試過這樣:

{% for value in values %} 
<ul> 
<li> {{value}}.</li> 
</ul> 

但這渲染頁面:

  • ( 'label1的', '文本1')
  • ( '標籤2', '文本2')

我也試過有字典與標籤作爲鍵和文本作爲價值,它呈現很好,但然後順序是不尊重,因爲它是一個字典。我想到了其他的做法,比如第一行有兩個字典,第二行有另外一個字典,但是由於我在python和django的模板方面的知識不夠一致,我不知道該怎麼做。

如果有人可以幫忙,將不勝感激。

編輯:其實我問這個問題後找到了答案兩個minuts,但我會留下它,以防它可以幫助任何人。在模板中,我只是做:

{% for labels, texts in values %} 
<ul> 
<li> {{labels}} : {{texts}}.</li> 
</ul> 

回答

3

使用str.join

values = [" : ".join(x) for x in zip(labels,results)] 

而這個列表傳遞給模板。

只需zip你需要做的模板中拆包:

values = zip(labels,results) 

{% for label, text in values %} 
<ul> 
<li> {{ label }} : {{ text }}</li> 
</ul> 
+0

這是快謝謝你,我編輯我的問題,因爲我找到了答案之前,我看到了你,但你認爲我應該保持這樣或者使用str.join代替? – sarahm

+0

@sarahm,保持你的 – eri

+0

@sarahm這取決於,如果你在不同的模板中使用相同的列表(或在同一個模板中多次使用),那麼最好將這樣的邏輯保存在一個地方(在str.join的視圖文件中),因爲例如,如果你需要將':'改成別的東西,那麼你必須在多個地方改變它,但在視圖文件中使用'str.join',你只需要在一個地方改變它。但是,如果你只做了一次,那麼你的方法沒有任何問題。 –