Как отправить несколько аргументов в пользовательские шаблоны Django из JS-кода внутри HTML-шаблона

Я пытаюсь использовать пользовательский тег шаблона для запуска определенной функции на переменной, которую я получаю в JS внутри моего HTML шаблона.

вот пример того, что я пробовал :

тег шаблона python

def calculate_km(value, arg):
    """
    Calculate the km from the source
    """
    args_list = eval(arg)
    layer_id = value
    return f"layer_id_is:{layer_id}, args_list:{args_list}"

затем я использую его внутри моего HTML js блока следующим образом :

const args_data = "[" + kmlEvent.featureData.id + "," + kmlEvent.latLng.lat + "," + kmlEvent.latLng.lng + "]";
console.log(`{{single_layer.id|calculate_km: ${args_data} }}`);

Проблема здесь заключается в добавлении JS переменной внутри тега шаблона, как вы видите, используя args_data внутри string, что должно вернуть синтаксис для нормального Django template, поэтому ожидается, что строка console.log отобразится следующим образом :

{{12|calculate_km:[12,Foo,123,456]}}

Но проблема в том, что он не считывает значение переменной args_data и оно отображается как :

{{12|calculate_km: ${args_data}}}

и, конечно, это возвращает ошибку, а именно :

django.template.exceptions.TemplateSyntaxError: calculate_km requires 2 arguments, 1 provided

поэтому кажется, что даже не читается значение args_data

Тег шаблона Django отображается на стороне сервера перед передачей HTTP-ответа. То, что браузер получает в ответе - это просто HTML и JavaScript.

JavaScript выполняется на стороне клиента, после того как все теги шаблона Django (и другие узлы) уже были разрешены и отображены.

К сожалению, вы не можете передавать аргументы JavaScript в тег шаблона Django, поскольку порядок выполнения несовместим. Вам придется переписать ваш тег шаблона как функцию JavaScript. Поскольку ваш код выглядит так, как будто он запускается событием (судя по именам переменных), переключение всего кода для выполнения на стороне сервера, скорее всего, невозможно.

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