服务端传递了一个字典的值给客户端,现在要把这个值显示出来,但是由于字典的特性,无法进行排序,如果在服务端的话,可以用collections.OrderedDict
来排序,但是前端要怎么处理?
views.py
def Hw_Formal_Vsgame_SqlQuery(request):
VsdbList = hw_formal_Vsgame.objects.all()
if request.method == 'POST':
form = SqlQueryForm(request.POST)
if form.is_valid():
serverlist = request.POST.getlist("dbcheckbox")
request.session['SqlCmd'] = form.cleaned_data['SqlCmd']
if serverlist == []:
messages.add_message(request, messages.INFO, u'未勾选游戏服')
return redirect('Vsgame.views.Hw_Formal_Vsgame_SqlQuery')
else:
request.session['indexsql'] = {}
for server_i in serverlist:
dbsql = hw_formal_Vsgame.objects.filter(pk=server_i)
dbhost = dbsql[0].serverhost
request.session['dbname'] = dbsql[0].servername
request.session['sqlres']=runSql(dbhost,server_i,request.session['SqlCmd'])
request.session['indexsql'][server_i] = request.session['sqlres']
messages.add_message(request, messages.INFO, u'数据库查询完成')
request.session['sqldic'] = collections.OrderedDict(request.session['indexsql'])
return redirect('Vsgame.views.Hw_Formal_Vsgame_SqlQuery')
else:
form = SqlQueryForm()
return render(request,'Hw_Formal_Vsgame_SqlQuery.html',
{
'VsdbList':VsdbList,
'form':form,
'SqlCmd':request.session.get('SqlCmd'),
'sqldic':request.session.get('sqldic'),
'dbname':request.session.get('dbname'),
}
)
前端显示
<div class="panel panel-default" style="margin-top: 40px">
<div class="panel-heading">
<button type="button" class="btn btn-info" data-clipboard-action="copy" data-clipboard-target=".panel-body">复制查询结果</button>
</div>
<div class="panel-body" >
<h4 style="color: darkblue">执行的语句:{{ SqlCmd }}</h4>
{% if sqldic %}
{% for key,value in sqldic.items %}
<P style="color: red">查询 Vs_{{ key }} 服的数据:
<br>
{% if value %}
{% for sql in value %}
<div style="color: red">**************** {{ forloop.counter }}. rVs *****************</div>
{% for key,value in sql.items %}
{{ key }}:{{ value }}<br>
{% endfor %}
</p>
{% endfor %}<br><br>
{% else %}
<p>Empty set (0.00 sec).</p><br><br>
{% endif %}
{% endfor %}
{% endif %}
</div>
</div>
</div>
显示结果:
怎么处理才能使这个正常排序的?
什么叫正常排序?
跟 serverlist 里的顺序一样?如果是这样的话,
request.session['indexsql'] = {}
改成
request.session['indexsql'] = collections.OrderedDict()
就可以了。因为之前
indexsql
是无序的,所以 sqldic 的顺序跟 serverlist 不一样。按数字从小到大?
request.session['sqldic'] = collections.OrderedDict(sorted(request.session['indexsql'].items(), key=lambda x: x[0]))
定义一个 template filters, 比如叫 sort_by_first_item: