Добавьте строковую переменную Javascript ВНУТРИ переменной шаблона django

У меня есть график, который заполняется переменными шаблона django. У меня есть функция обновления графика, которая обновляет данные после нажатия определенных кнопок. Вместо того, чтобы писать одну и ту же js функцию 7 раз, могу ли я обновить javascript функцию, чтобы вызвать правильные данные в переменной шаблона Django?

В принципе, btn_id будет либо A, B, C, D, E или F, и я хочу, чтобы переменная шаблона django отображала правильные данные на основе значения btn_id.

    var results = {{ all_test_results.A.curve_series.curve_series }}.map(function(val, i) {
        return val === 'None' ? null : val;
    });

становится

    const btn_id = this.id.slice(-1); # A, B, C, D, etc

    var results = {{ all_test_results.{{ btn_id }}.curve_series.curve_series }}.map(function(val, i) {
        return val === 'None' ? null : val;
    });

enter image description here

Я уверен, что есть простой способ внедрить js-строку в переменную шаблона Django, верно?

Просто, нет, но и не так уж сложно

Я уверен, что существует простой способ инжектировать js-строку в Django шаблонную переменную, верно?

Вот в чем проблема. {{ all_test_results.A.curve_series.curve_series }} обрабатывается сервером, который обрабатывается Django, который принимает этот тег, заполняет его данными и возвращает HTML документ обратно клиенту. Теперь это клиент, то есть конечный пользователь, который нажимает, скажем, на кнопку C, но откуда Django, который живет на сервере, знает об этом? Никак, и именно поэтому все не так просто.

Решение

Когда пользователь нажимает C, вы можете отправить простой AJAX-запрос от клиента к серверу с этой информацией. Затем сервер может отправить обратно значение all_test_results.C.curve_series.curve_series, которое может быть получено вашим JavaScript, так что вам не придется делать это 7 раз.

Что не так с этим согласно документации?

https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#json-script

Затем вы можете использовать или изменять полученный js объект по своему усмотрению.

Вернуться на верх