按字母顺序加载JSON文件-Django

时间:2018-11-25 21:49:11

标签: python json django

使用此方法:

def postcodes(request):
    with open('core/stores.json') as f:
        data = json.load(f)
        return JsonResponse(data, safe=False)

我将本地json文件加载到此url中:

urlpatterns = [
    path('stores/', views.postcodes, name='postcodes'),
]

它完美呈现,现在,我的json文件看起来像这样:

[
{
    "name": "St_Albans",
    "postcode": "AL1 2RJ"
},
{
    "name": "Hatfield",
    "postcode": "AL9 5JP"
},
{
    "name": "Worthing",
    "postcode": "BN14 9GB"
},

依此类推...

如您所见,如果考虑到邮政编码,这是按字母顺序排列的。

我需要的是读取此文件,并按字母顺序对其进行渲染,但不是按原样(由postcode)而是由name渲染。

我不认为我可以使用内置的Django循环或标签,因为它们主要用于模型或存储的数据。

但是我不确定。

有什么比将所有内容都保存到数据库更快的方法呢?

我查看了serializers,但这是为了django-rest-framework,我在这里使用普通的requests

有什么想法吗?

我现在不使用任何模板,它只是按原样显示在浏览器上。

1 个答案:

答案 0 :(得分:2)

您可以使用.sort(..)来订购列表:

import json
from operator import itemgetter

def postcodes(request):
    with open('core/stores.json') as f:
        data = json.load(f)
    data.sort(key=itemgetter('name'))
    return JsonResponse(data, safe=False)

然后将内容呈现为:

[
    {"name": "Hatfield", "postcode": "AL9 5JP"},
    {"name": "St_Albans", "postcode": "AL1 2RJ"},
    {"name": "Worthing", "postcode": "BN14 9GB"}
]

请注意,如果您想始终按字母顺序提取邮政编码 ,则最好按该顺序对stores.json文件进行简单排序。