Вопрос:
Я работаю над проектом 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, но имейте в виду, что это кэшируется клиентским браузером. Неплохо иметь динамические данные.