Представление данных, полученных из стороннего api, в django с помощью chart.js
Я работаю над сайтом, который показывает витамины в продуктах питания Я использую сторонний api, который предоставляет данные, которые мне нужны, проблема в том, что я не могу найти способ представить эти данные в chart.js, то, что я в основном пытаюсь сделать, это получить данные из api, затем извлечь метки и количество, которое мне нужно из данных, но я не знаю, как передать это в шаблон и быть в состоянии фактически использовать его в моем файле javascript.
Вот код, который я сейчас пытаюсь заставить работать с ним, в настоящее время он испорчен, потому что я постоянно добавляю и удаляю его, но я надеюсь, что вы понимаете, что я пытаюсь сделать
views.py
def food_info(food_id, amount):
info = requests.get(
f'{base_url}/food/ingredients/{food_id}/information?amount={amount}&unit=grams&apiKey=')
food = info.json()
nutrients_data = food['nutrition']['nutrients']
labels = [nutrient['title'] for nutrient in nutrients_data if nutrient['amount'] > 0]
return JsonResponse(data={'labels':labels})
def search_food(request):
if request.method == 'POST':
name = request.POST.get('name')
amount = request.POST.get('amount')
result = requests.get(
f'{base_url}/food/ingredients/search?query={name}&addChildren=false&number=1&apiKey=')
result = result.json()
food_id = result['results'][0]['id']
food_info(food_id,amount)
return render(request, 'food/test.html')
class FoodChartData(APIView):
authentication_classes = []
permission_classes = []
def get(self, request, format=None):
labels = ['Cholesterol', 'Saturated Fat',
'Phosphorus', 'Poly Unsaturated Fat', 'Fiber']
food_data = [0.08, 0.01, 0.25, 1.0, 0.5]
data = {
'labels': labels,
"data": food_data
}
return Response(data)
urls.py
from .views import FoodChartData,search_food,food_info
from django.urls import path
urlpatterns = [
path('api/chart/data', food_info, name='chart-data'),
path('', search_food, name='food-search')
]
Javascript
var endpoint = 'api/chart/data'
$.ajax({
method:"GET",
url:endpoint,
success : function(data){
labels = data.labels
defaultData = data.data
console.log('success')
console.log(labels)
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: labels,
datasets: [{
label: 'food info',
data: defaultData,
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
}})