2017-06-04 50 views
-2

所以我有这个作为我的HTML文件。如何使用Python和Django按照最大值到最小值列出字典中的所有项目?

<form method="post"> 
    {% csrf_token %} 
    Problem: <input type="text" name="poi" autofocus> 
    <input type="submit" value="Submit"> 
    <hr> 
</form> 
<br> 
<ul> 
    {% for u in sort %} 
     <li>{{ u|safe }}</li> 
    {% endfor %} 
<ul> 

,我有那种叫我的变量使用以下这需要所有的项目在字典dictionary = {'hi': 5, 'hey': 3, 'hiya': 1}和排序他们由最高到最低值。

for w in sorted(dictionary, key=dictionary.get, reverse=True): 
    sort.append(w) 

现在列表按照从最高到最低的顺序排列。正如您在HTML文件中看到的那样,我试图按顺序打印它们。出了什么问题是它没有打印任何东西。我究竟做错了什么?

编辑:请参阅以下render

try: 
    return HttpResponse(request, 'patrec.html', {'sort':sort}) 
except: 
    return render(request, 'patrec.html') 
+0

你是否确信'sort'包含你所期望的? (您是否在视图代码中的日志消息中打印了它的内容?)您是否将'sort'传递给模板'render'调用? –

+0

我做了一个编辑。当你有机会时检查它 – NickTheInventor

+0

是从数据获取数据库?如果是,那么你可以使用django ORM。看看这个https://docs.djangoproject.com/en/1.11/ref/models/querysets/#django.db.models.query.QuerySet.order_by – Kaushal

回答

2

您以错误的方式使用HttpResponse。它注定要抛出异常,因为这不是它的工作原理。因此,它始终引发一个例外,并且在except区块内它将返回render的结果,而您没有通过{'sort': sort}作为上下文。所以只需删除tryexcept块以及HttpResponse。你应该只有这个:

return render(request, 'patrec.html', {'sort': sort}) 
+0

我保留了'try ... except',它工作正常。谢谢您的回答! – NickTheInventor

0

你可以做到这一点与

import heapq 
list1=heapq.nlargest(len(dict1), dict1, key=dict1.get) 
print(list1) 

其中,dict1是字典的名称。

由于heapq是用Python 3构建的,所以您不需要安装任何东西。

相关问题