Как использовать шаблон URL Django в файле Javascript

#javascript #django #ajax

#javascript #django #ajax

Вопрос:

Я использую Django 3.1, и я хотел бы знать, как использовать шаблон URL Django в файле Javascript. Я пытаюсь реализовать AJAX, и когда я пытаюсь открыть соединение, используя следующую команду в файле Javascript (не внутри тега script в файле HTML):

 var xmlhttp = new XMLHTTPRequest();
xmlhttp.open("GET", "{% url 'checkUser' %}?username="   encodeURIComponent(username.value), true);
  

Шаблон не анализируется. Но если я использую код Javascript внутри тега script в HTML-файле, он работает нормально. Возможно ли использовать шаблоны Django в файле JS? Как?

Ответ №1:

один простой способ — сохранить все ваши URL-адреса в html в переменные javascript, а затем использовать эти переменные из .js файлов.

В html у вас будет что-то вроде этого

 <script language="Javascript">
   var check_user_url = "{% url 'checkUser' %}";
</script>
  

а затем в файлах .js вы можете использовать эти переменные

 var xmlhttp = new XMLHTTPRequest();
xmlhttp.open("GET", check_user_url   "?username="   encodeURIComponent(username.value), true);
  

Комментарии:

1. Спасибо, @Andrey Maslov, но это именно то, чего я хотел бы избежать: иметь Javascript и HTML в одном файле. Но, согласно вашему ответу, я считаю, что у Django нет способа проанализировать файл JS.

2. я думаю, что есть способ. вы можете создавать .js файлы в качестве других .html шаблонов, но это было бы плохой идеей, потому что обычно вы хотите, чтобы ваши статические файлы кэшировались сервером

3. вы правы. Это означает, что разработчики Django не включили полную поддержку запросов AJAX. Основываясь на ваших комментариях, я вижу 3 варианта: (1) включить код javascript в тот же HTML-файл, (2) использовать отдельные файлы и не использовать именованные ссылки из urls.py , или (3) используйте дополнительный HTML-файл только для включения кода Javascript. Я не знаю, какой вариант является худшим.

4. вы можете использовать data-* опции для хранения всех необходимых данных для ваших .js файлов без использования javascript в html шаблонах