该函数返回一个有序列表
my_olist = OrderedDict()
my_olist['bananas'] = 3
my_olist['apples'] = 1
..
return my_olist
view.py中的我确认订单已维持
returned_ordered_list = mylist() # this is still ordered
request.session['results'] = {...
'ordered_list': returned_ordered_list
}
return render(request, HttpResponseRedirect(reverse('myapp:resultspage',))
但是,在HTML模板结果页中,不再维护订单
{% for key, value in ordered_list.items %}
<b>{{key}}:</b> {{value}} <br>
{% endfor %}
我见过一个为orderedDict工作的解决方案,但他们没有使用HttpResponseRedirect。
答案 0 :(得分:3)
如果您在会话中存储了一个有序的dict,那么该订单将不会被保留。默认情况下,Django会话序列化为JSON。当它被反序列化时,你得到一个普通的字典,所以排序将会丢失。
如果排序很重要,并且您不必按密钥访问字典值,那么您可以改为使用元组列表:
my_olist = []
my_olist.append(('bananas', 3))
my_olist.append(('apples', 1))
然后更新模板以遍历列表:
{% for key, value in ordered_list %}
答案 1 :(得分:1)