django怎样对模板的字典排序的?

服务端传递了一个字典的值给客户端,现在要把这个值显示出来,但是由于字典的特性,无法进行排序,如果在服务端的话,可以用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>

显示结果:

clipboard.png

怎么处理才能使这个正常排序的?

阅读 4.2k
1 个回答

什么叫正常排序?

  • 跟 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:

 {% for key,value in sqldic.items|sort_by_first_item %}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题