Как отобразить контекстные данные Django (JSON) во внешнем файле JavaScript?
Вопрос у меня такой:
Как мне получить JSON данные, созданные по шаблону, чтобы их можно было использовать .js файл, чтобы видеть и использовать JSON данные из моего контекста Django?
Проблема, которую я пытаюсь решить, заключается в следующем:
Я работаю над добавлением CSP (Content Security Policy) к моему сайту Django. Загвоздка в том, что у меня есть некоторые встроенные JavaScript при шаблонировании переменных JSON. Это не было бы проблемой, но templating находится внутри секции JavaScript файла .html. Таким образом, чтобы соблюсти строгий CSP, мне нужно перенести всю часть JavaScript из файла .html в файл .js. Код, который мне нужно переместить, выглядит следующим образом:
<script>
let data = [
{
"key" : "Last 10 Days",
"values" : {{ last_ten_days }},
},
{
"key" : "Daily Score",
"bar": true,
"values" : {{ daily_scores }},
}
].map(function(series) {
series.values = series.values.map(function(d) { return {x: d[0], y: d[1] } });
return series;
});
</script>
Я передаю значения через Django TemplateView в контекст, чтобы я мог вывести данные на график, используя NVD3.js, на моей веб-странице. Это выглядит примерно так:
class TheScores(LoginRequiredMixin, TemplateView):
template_name = 'the_scores.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
...
context['last_ten_days'] = last_ten_days
context['daily_scores'] = daily_scores
return context
При перемещении этого раздела JavaScript из моего HTML шаблона переменная шаблонизация JSON данных для last_ten_days и daily_scores больше не работает
Я не знаю, как заставить JavaScript видеть данные, не оставляя их в строке, что нарушило бы строгость, необходимую для того, чтобы CSP имел какую-либо ценность (кажется, что все или ничего). Итак, в результате создается внешний JS-файл, такой же, как и выше, назовем его scores.js:
Проблема здесь: scores.js не имеет понятия, как загрузить last_ten_days или daily_scores как JSON:
let data = [
{
"key" : "Last 10 Days",
"values" : {{ last_ten_days }},
},
{
"key" : "Daily Score",
"bar": true,
"values" : {{ daily_scores }},
}
].map(function(series) {
series.values = series.values.map(function(d) { return {x: d[0], y: d[1] } });
return series;
});
Затем, когда я заменяю inline-секцию JavaScript на <script src="{% static "js/scores.js" %}" ></script>, JavaScript не читает {{ }} как шаблонизацию переменных Django (справедливо). И вот вопрос, как я могу использовать JSON данные через Django шаблон внутри JavaScript, при этом реализуя строгий CSP? Спасибо.