В Django почему возникает ошибка "TypeError at / string indices must be integers"?
Я пытаюсь научиться сохранять в Django часть json-контента, поступающего из kraken api. Просматривая несколько примеров здесь на stackoverflow, я пришел к такому коду:
views.py
from django.shortcuts import render
from meal_app.models import Kraken
import requests
def get_krakens(request):
all_krakens = {}
url ='https://api.kraken.com/0/public/Assets'
response = requests.get(url)
data = response.json()
for i in data:
kraken_data = Kraken(
name = i['altname']
)
kraken_data.save()
all_krakens = Kraken.objects.all().order_by('-id')
return render (request, 'krakens/kraken.html', { "all_krakens":
all_krakens} )
Когда я пытаюсь запустить, появляется:
Как я могу решить эту ошибку? Мой json виден в консоли, но я не могу получить доступ к значению 'altname'. Ваша помощь будет очень признательна.
/Users/davidmoreira/Documents/crypto/djangokrakenapi/meal_project/meal_app/views.py, line 14, in get_krakens
name = i['altname']
На iPad, поэтому не могу проверить, но я подозреваю, что ваш 'i' - это строка, и ее нужно преобразовать в объект/словарь Python, прежде чем вы сможете извлечь из нее подэлемент.
Посмотрите на метод json.loads
в модуле json
.
Ваш "i" имеет форму строки. Вам нужно сначала преобразовать ее в объект.
Используя i = json.loads(i)
При переходе по словарю перебираются ключи, а не значения. Вы хотите:
for i in data.values():
from django.shortcuts import render
from meal_app.models import Kraken
import requests
def get_krakens(request):
all_krakens = {}
url ='https://api.kraken.com/0/public/Assets'
response = requests.get(url)
data = response.json()
for i in data:
kraken_data = Kraken(
name = data['result'][i]['altname']
)
kraken_data.save()
all_krakens = Kraken.objects.all().order_by('-id')
return render (request, 'krakens/kraken.html', { "all_krakens":
all_krakens} )