2017-02-14 29 views
0

該函數返回一個有序列表Django的模板不是在view.py保持OrderedDict

my_olist = OrderedDict() 
    my_olist['bananas'] = 3 
    my_olist['apples'] = 1 
    .. 
    return my_olist 

我確認訂單維持

returned_ordered_list = mylist() # this is still ordered 
    request.session['results'] = {... 
      'ordered_list': returned_ordered_list 
} 
return render(request, HttpResponseRedirect(reverse('myapp:resultspage',)) 
在HTML模板resultspage

然而,爲了不保存時間更長

{% for key, value in ordered_list.items %} 
<b>{{key}}:</b> {{value}} <br> 
{% endfor %} 

我見過一個解決方案爲orderedDict工作,但他們di d不使用HttpResponseRedirect。

+3

行'返回渲染(請求,HttpResponseRedirect(反向( 'MYAPP:resultspage',))'沒有意義的第二個參數'render'應該是模板名稱。 – Alasdair

回答

3

如果您在會話中存儲了有序的詞典,那麼訂單將不會被保留。默認情況下,Django會話序列化爲JSON。當它被反序列化時,你會得到一個正常的字典,所以排序會丟失。

如果排序是非常重要的,而且你不必通過鍵來訪問字典中的值,那麼你可以使用一個元組的列表,而不是:

my_olist = [] 
my_olist.append(('bananas', 3)) 
my_olist.append(('apples', 1)) 

然後在列表更新模板循環:

{% for key, value in ordered_list %}