Как отправить несколько аргументов в пользовательские шаблоны 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. Поскольку ваш код выглядит так, как будто он запускается событием (судя по именам переменных), переключение всего кода для выполнения на стороне сервера, скорее всего, невозможно.