Как передать данные Django во внешний JS файл?

Вопрос: Я работаю над проектом Django. Я хотел бы передать данные из Django views.py в javascript файл, запустить js-функцию, а затем отобразить возвращаемое значение на мою html-страницу. Я не использую форму в этом проекте. Может ли кто-нибудь, пожалуйста, направить меня на то, как подойти к этому? Большинство ответов, которые я вижу здесь, в настоящее время

Вопрос:

Я работаю над проектом Django. Я хотел бы передать данные из Django views.py в javascript файл, запустить js-функцию, а затем отобразить возвращаемое значение на мою html-страницу. Я не использую форму в этом проекте. Может ли кто-нибудь, пожалуйста, направить меня на то, как подойти к этому? Большинство ответов, которые я вижу здесь, в настоящее время устарели, и я пробовал разные подходы без везения. Я использую Python v2.7. Заранее спасибо!

Ответ №1

Если ваш проект использует Jinja или какой-либо другой механизм шаблонов, вы можете попробовать передать данные в шаблон.

Нашел этот бит в написании вашего первого приложения Django, часть 3, и немного изменил его.

def index(request): template = loader.get_template(‘app/index.html’) my_data = [‘whatever your data is’] context = { ‘my_data’: my_data, } return HttpResponse(template.render(context, request))

И в index.html

<html> <head> // import jQuery </head> <body> <div id=’my_data_label’></div> <script type=»text/javascript»> var my_data = «{{ my_data }}»; // gets set by jinja $(‘.my_data_label’).text(my_data); // do whatever with the data </script> </body> </html>

Не уверен, что это именно то, что вы ищете, но надеюсь, что это поможет.

Ответ №2

Возможно, было бы неплохо напрямую отображать данные javascript внутри <script> в шаблоне страницы. Если он будет использоваться на нескольких страницах, обязательно включите его в базовый шаблон или импортируйте его с помощью include.

Ваше представление может напоминать стандартное представление django:

def detail(request, poll_id): try: p = Poll.objects.get(pk=poll_id) except Poll.DoesNotExist: raise Http404(«Poll does not exist») return render(request, ‘polls/detail.html’, {‘poll’: p})

У шаблона была бы добавленная логика для создания объекта javascript:

<script> var questionset = { {% for q in poll.question_set %} q.id : { «title»: «{{ q.title }}», «score»: {{ q.score }} } {% if not loop.last %},{% endif %} {% endfor %} } </script>

Теперь у вас есть объект javascript в вашем шаблоне, который динамически создается из данных. Вы можете использовать его, как вам угодно:

<script> function doSomething(questionset){ … } </script>

Есть способы сохранить ваши данные в файле javascript, но имейте в виду, что это кэшируется клиентским браузером. Неплохо иметь динамические данные.

Оцените статью
Добавить комментарий