Передача переменных Django в JS, возможно ли?
Другого способа, в общем, и нет. Разве что загружать значения динамически через XHR (зависит от размера и сложности данных в коллекции).
Можешь посмотреть, как реализованы переводы строк для js в Django — точно таким же способом.
emorozov ☆
( 04.12.21 12:38:54 MSK )
- Ответить на это сообщение
- Ссылка

Закодируй данные в json. Отлично работает как escape для js.
eternal_sorrow ★★★★★
( 04.12.21 12:42:26 MSK )
- Ответить на это сообщение
- Ссылка


Передача и парсинг в виде json порешала проблему. На стороне сервера делаем выборку чего надо и потом json.dumps по коллекции, на стороне клиента пихаем JSON.parse(«>»). Отдельное спасибо eternal_sorrow .
LongLiveUbuntu ★★★★★
( 04.12.21 13:21:38 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от LongLiveUbuntu 04.12.21 13:21:38 MSK

если это простые переменные (не массивы или словари например), то необязательно JSON.parse даже. простые строки, числа и булевы значения являются с одной стороны валидным json’ом, а с другой стороны валидными значениями в js.
eternal_sorrow ★★★★★
( 04.12.21 16:30:17 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от eternal_sorrow 04.12.21 16:30:17 MSK

В моем случае это был таки массив. Так что я подстраховался.
LongLiveUbuntu ★★★★★
( 04.12.21 17:42:42 MSK ) автор топика
- Ответить на это сообщение
- Ссылка

Django Rest Framework!
menangen ★★★★★
( 04.12.21 19:15:19 MSK )
- Ответить на это сообщение
- Показать ответы
- Ссылка

Посему бы тогда сразу не кидать захардкоженный (с точки зрения JS) объект, собрав его в шаблоне?
А так да, нормально — это drf
Shadow ★★★★★
( 04.12.21 21:48:50 MSK )
Последнее исправление: Shadow 04.12.21 21:50:57 MSK (всего исправлений: 1)
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от menangen 04.12.21 19:15:19 MSK

И сверху Ангуляром шлифануть.
LongLiveUbuntu ★★★★★
( 04.12.21 22:06:29 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от Shadow 04.12.21 21:48:50 MSK

У мя голый Django пока что.
LongLiveUbuntu ★★★★★
( 04.12.21 22:07:00 MSK ) автор топика
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от LongLiveUbuntu 04.12.21 22:06:29 MSK

В жопу этого монстра корпоративного, он должен был быть как Vue 2, а теперь есть и получше — Vue 3
menangen ★★★★★
( 05.12.21 01:54:01 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от LongLiveUbuntu 04.12.21 22:07:00 MSK

Голый Django в 2021 не справляется уже, сейчас жирный клиент и тупой бекенд — вот так принято. И на беке куча всяких служб, и Go и питон и нода — все работают на благо бизнеса
menangen ★★★★★
( 05.12.21 01:55:43 MSK )
- Ответить на это сообщение
- Ссылка
Братуха, будешь смеятся, но так не только можно но и нужно делать.
Можно просто собрать в коде шаблона с помощью обычных выражений шаблонного движка Django объект JSON и проинициализировать его. Ведь до этапа парсинга DOM-дерева браузером весь навороченый комплекс HTML-JS-CSS это просто текст, обычный вполне себе текст. На этом стоит весь интернет.
pup_kin ★
( 05.12.21 06:41:41 MSK )
- Ответить на это сообщение
- Ссылка
Ответ на: комментарий от menangen 04.12.21 19:15:19 MSK
Обезьяну пустили в множественное наследование, получились cbv и drf.
anonymous
( 05.12.21 07:10:42 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Ответ на: комментарий от anonymous 05.12.21 07:10:42 MSK

Адепты функциональщины подтянулись? Даёшь веб сервер на сях!
menangen ★★★★★
( 05.12.21 08:37:40 MSK )
- Ответить на это сообщение
- Показать ответ
- Ссылка
Как передать данные из JS в Django?
Здравствуйте, у меня возникла проблема.
Я хочу сделать фильтр на сайте, в котором можно будет выбрать несколько пунктов, а потом нажать кнопку «Применить». Обработку нажатия кнопки производит JS и передает в зависимости от выбранных пунктов данные в Django. Сам сервер Django обрабатывает данные и открывает новую URL-страницу, где будут выведены все объекты из БД, которые будут удовлетворять условиям.
Проблема связана с тем, что я не знаю, как передать эти данные из JS в Django. В инете находила Ajax и XMLHttpRequest, но они, вроде, отправляют данные на сервер, а потом получают ответ с сервера, а мне необходимо просто отправить данные на сервер.
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Передать данные из csv в таблицу html через Django
Собственно весь вопрос в заголовке. Как можно лучше всего это реализовать? Есть csv файл с 3-мя.
django-tables2: Как отложенно передать поле?
Мне надо из TopicListTable передать в класс ActionsColumn поле user, но после того, как он в.
Как в Django передать youtube ссылку в шаблон?
Я хочу на сайт добавить ссылки на видео с ютуба ,но при загрузке страницы iframe который ,я добавил.
Как передать django переменную в атрибут формы action?
Доброго времени суток, есть форма, в ней атрибут action На данный момент запись следующая: action.
Как передать в ссылку django параметр таблицы mysql
Всем доброго времени суток. Задание дали такое: из бд (mysql) выводить на сайт данные в виде доски.
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
Сообщение от Liza1996 
Django обрабатывает данные и открывает новую URL-страницу
django не может открыть страницу, это не браузер
Сообщение от Liza1996 
как передать эти данные из JS в Django
они отправляют данные на сервер, а дальше — это уже проблема сервера, что делать с ними, и что ответить на такой запрос.
1040 / 575 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
Liza1996, тут, по идее, никакой жс вообще не нужен. Но если всё-таки через жс, то какой-то аякс/фетч/хмлхттпреквест делай на сервер и возвращай оттуда ссылку для редиректа и средствами жс делай редирект.
Регистрация: 25.09.2017
Сообщений: 473
А в случае , если js возвращает некоторый параметр (токен) как его передать в контроллер django? Как POST-параметр?:
request.POST["something"]
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
Сообщение от Alex_py 
А в случае , если js возвращает некоторый параметр (токен) как его передать в контроллер django? Как POST-параметр?:
Не совсем понятно в чем именно вопрос — как передать или как получить? Если как получить — то это зависит от того, как передал.
Регистрация: 25.09.2017
Сообщений: 473
Сообщение от Jabbson 
Если как получить — то это зависит от того, как передал.
JS-Скрипт-модуль подключен к глав. странице. Этот модуль обращается к внешнему серверу (этот сервер относится к api-сервису).
Есть javascript, который получает (или возвращает) access_token, который используется в контроллере для вызова функций api-сервиса. Вот его код, который также подключен к глав. странице:
1 2 3 4 5 6 7
script> var auth = vkBridge.send("VKWebAppGetAuthToken", ); if (auth.status != 200) < alert(auth.status + ": " + auth.statusText); >else /script>
Я знаю javascript очень плохо, поэтому, может не совсем правильно соблюдаю синтаксис.
Эту страницу я хотел бы отрендерить с помощью контроллера django и для получения остальных элементов этой страницы, котроллер обращается к api-сервису, которому нужен access_token.
В поддержке мне объяснили так, что если я хочу внедрить свое django-приложение в каталог их сайта, то мне нужно подключить их js-скрипт, чтобы получить access_token. Ну каждый access_token соответствует какой-то сессии, какого-то пользователя. А как его извлечь для использования в контроллере django — нет такой информации.
Быстрый и грязный Django — Передача данных в JavaScript без AJAX

Если мы хотим передать данные из Django в JavaScript, мы обычно говорим об API, сериализаторах, вызовах JSON и AJAX. Обычно дело усложняется наличием React или Angular на фронте.
Но иногда вам нужно сделать что-то быстро и грязное – построить диаграмму и не задумываться над инфраструктурой одностраничного приложения.
Обычный подход
Допустим, у нас есть приложение на Django со следующей моделью:
from django.db import models class SomeDataModel(models.Model): date = models.DateField(db_index=True) value = models.IntegerField()
И простой TemplateView :
from django.views.generic import TemplateView class SomeTemplateView(TemplateView): template_name = ‘some_template.html’
Теперь мы можем построить простую линейную диаграмму с помощью Chart.js, и мы не хотим использовать AJAX, создавать новые API и т.д.
Если мы хотим визуализировать простую линейную диаграмму в нашем some_template.html , код будет выглядеть следующим образом (взято из этих примеров):
И получится следующее:

Теперь, если мы захотим построить диаграмму данных, поступающих из SomeDataModel , мы подойдем к этой задаче следующим образом:
from django.views.generic import TemplateView from some_project.some_app.models import SomeDataModel class SomeTemplateView(TemplateView): template_name = 'some_template.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['data'] = [ < 'id': obj.id, 'value': obj.value, 'date': obj.date.isoformat() >for obj in SomeDataModel.objects.all() ] return context
А затем мы визуализируем массив JavaScript с помощью шаблона Django:
Именно так это и работает, но, как по мне, слишком грязно. У нас больше нет JavaScript, но есть JavaScript с шаблоном Django. Мы теряем возможность выделить JavaScript в отдельный файл .js. Также мы не можем красиво работать с этим JavaScript.
Но можем сделать лучше и быстрее.
Добавим остроты
- В нашем случае мы будем сериализовать данные через json.dumps и хранить их в контексте.
- Отрендерим скрытый элемент с уникальным id и атрибутом data-json , а именно с сериализованными данными JSON.
- Запросите этот из JavaScript, прочитайте атрибут data-json и используйте JSON.parse , чтобы получить необходимые данные.
Преимуществом становится то, что код на JavaScript не содержит шаблонов Django, но имеет переиспользуемый шаблон для получения необходимых данных.
Почти как упрощенный AJAX.

Ниже пример того, как я использую эту стратегию:
import json from django.views.generic import TemplateView class SomeTemplateView(TemplateView): template_name = 'some_template.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['data'] = json.dumps( [ < 'id': obj.id, 'value': obj.value, 'date': obj.date.isoformat() >for obj in SomeDataModel.objects.all() ] ) return context
Теперь извлечем наш код на JavaScript в статичный файл chart.js .
В результате получим some_template.html :
Как видите в скрытом div происходит магия. Мы скрываем div , чтобы удалить его из любой верстки. Здесь вы можете дать ему соответствующий id или использовать любой подходящий HTML-элемент.
Атрибут data-json (который необязателен и не является чем-то предопределенным) содержит нужный нам JSON.
Теперь, наконец, мы реализуем следующую простую функцию для получения и анализа необходимых нам данных:
function loadJson(selector)
И вот наш chart.js готов:
function loadJson(selector) < return JSON.parse(document.querySelector(selector).getAttribute('data-json')); >window.onload = function () < var jsonData = loadJson('#jsonData'); var data = jsonData.map((item) =>item.value); var labels = jsonData.map((item) => item.date); console.log(data); console.log(labels); var config = < type: 'line', data: < labels: labels, datasets: [ < label: 'A random dataset', backgroundColor: 'black', borderColor: 'lightblue', data: data, fill: false >] >, options: < responsive: true >>; var ctx = document.getElementById('chart').getContext('2d'); window.myLine = new Chart(ctx, config); >;
Быстрый и грязный способ для тех, кто просто хочет что-то отправить. А вот и конечный результат:

Дисклеймер
Я не рекомендую вам пользоваться этим подходом для чего-то большего, чем грязное доказательство концепции. Как только ваш код на JavaScript начнет расти, станет сложно его контролировать. Рекомендуется пройти путь SPA с одним из популярных фреймворков (в нашем случае React).
