Я изо всех сил пытаюсь загрузить диаграмму Google из статического файла в html с помощью Django. Я могу загружать другие файлы javascript, используя {% load static %}. Кроме того, я могу отобразить диаграмму, если вставлю файл javascript в файл html:
{% extends '_base.html' %}
{% load static %}
{% block content %}
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.0/jquery.min.js"></script>
<script type = "text/javascript" src = "https://www.gstatic.com/charts/loader.js"></script>
<!-- JumboTron -->
<div class = "container">
<div class = "center-block">
<div id = "curve_chart"></div>
</div>
</div>
<script type = "text/javascript" id=demo>
let data_from_django = {{ object_list|safe }};
CHART WORKING
function drawChart() {
var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
chart.draw(data, options);
}
</script>
{% endblock %}
Однако, если я вставлю код javascript в <script type = "application/json" src = "{% static 'js/load_data.js' %}"></script> и загрузлю static, код никогда не будет выполнен.
Я попытался поместить файл javascript также в заголовок, но он все еще не загружается. Любые идеи о чем-то, что я мог упустить?
Обновлять
Смотрите load_data.js :
$(function () {
let data_from_django = {{ object_list|safe }};
let dataValues=data_from_django["dataValues"];
let dataBacktest=data_from_django["dataBacktest"];
var googledata = [];
for(let i=0, size=dataValues.length; i<size; i++){
var kline=dataValues[i]
var value=kline["average"];
var date = new Date(kline["date"]);
var googlekline = [date, value];
googledata.push(googlekline);
}
google.charts.load('current', {
'packages': ['corechart']
});
google.charts.setOnLoadCallback(drawChart);
function drawChart() {
var data = new google.visualization.DataTable();
data.addColumn('datetime', 'Date');
data.addColumn('number', 'value');
data.addColumn({
type: 'string',
role: 'annotation'
data.addRows(googledata);
var options = {
title: 'Price Chart',
hAxis: {
format: 'MMM, dd, yyyy, HH:mm'
},
explorer: {
actions: ['dragToZoom', 'rightClickToReset'],
axis: 'horizontal',
maxZoomIn: 100.0
},
legend: {
position: 'bottom'
},
width: $(window).width()*0.75,
height: $(window).height()*0.5
};
var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));
chart.draw(data, options);
}
});
@ Сэм, ты прав! Я не понимал, что, изменив его на application/json, файл больше не загружается. Однако, как упоминалось в комментарии к ответу от @Sourav, данные django загружаются неправильно. Я получаю ошибку Uncaught SyntaxError: неожиданный токен {. А то ничего не отображается
Я думаю, что эта ошибка возникает из-за строки, содержащей переменную вашего шаблона: {{ object_list|safe }}. Поскольку вы используете включение, Django неправильно заменяет {{ object_list|safe }} объектом, и ваш файл Javascript читает его буквально. Чтобы исправить это, вам нужно установить переменную js в вашем стандартном файле (без включения), а затем передать ее во включенный скрипт.
это логично, я проверю



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Здесь возникают две проблемы:
<script type = "text/javascript" src = "{% static 'js/load_data.js' %}"></script>let data_from_django = {{ object_list|safe }}; недействителен Javascript). Вы должны определить переменную в своем базовом файле, используя тег шаблона Django, а затем передать эту переменную включенному сценарию.
Если вы просматриваете исходный код своего файла, правильно ли ваш тег {% static %} указывает на местоположение вашего файла .js? Если да, то правильно ли он отображается при переходе по URL-адресу вашего файла .js?