Обзор проблемы:
Я создаю клиент на основе Django с намерением вернуть данные из веб-службы.Цель этого проекта - вернуть данные пользователю из веб-службы на основе значений, выбранных пользователем в форме.После отправки формы строка запроса генерируется, отправляется веб-службе, а данные страницы возвращаются в виде строки.В настоящее время эти данные отображаются пользователю в браузере.Я хочу предоставить функциональность, которая позволяла бы пользователю нажимать кнопку и загружать данные.
Вопрос:
Как я могу вернуть данные пользователю, когда они нажимают кнопку в своембраузер для скачивания?Как сделать разные параметры одних и тех же данных доступными (например, application / json или text / csv)?
Текущая (неработающая) реализация:
Я пытаюсь и терплю неудачу,сделать следующее:
views.py
Возвращение объекта render_to_response моего шаблона.В шаблон я передаю форму и данные в ее различных формах.
def view(request):
#Do stuff, get data as string
#Get data into needed formats (see utils.py)
jsonData = jsonToJsonFile(dataString, fileName)
return render_to_response('template.html', {'someForm' : aForm,
'regularData' : stringData,
'jsonData' : jsonData...})
utils.py
Содержит функции для получения данных в виде строки и возврата объектов ответа.В этой части я не уверен, правильно ли я поступаю.Я вызываю эти функции в представлении, чтобы получить jsonData (и csvData) в соответствующие им форматы из исходной строки данных.
def jsonToJsonFile(dataString, fileName):
#Get the data as json
theData = json.dumps(dataString)
#Prepare to return a json file
response = HttpResponse(theData, mimetype = 'application/json')
response['Content-Disposition'] = 'attachment; filename=' + str(fileName) + '.json'
#return the response
return response
template.html
В настоящее время я передаю ответы вшаблон.Это где я действительно потерян, и еще не начал находить хорошее решение.Я ожидаю, что мне нужно будет использовать javascript, чтобы возвращать переменные (jsonData и csvData) пользователю при нажатии кнопки.Я попытался использовать действие onclick класса привязки, а затем с помощью javascript вернуть переменную django ответа - но это действительно не работает.
<li class = 'button'>
<a href = "#dataButtons" onclick = "javaScript:alert('test');">
TEST
</a>
</li>
<li class = 'button'>
<a href = "#dataButtons" onclick = "javaScript: var a = '{{ jsonData }}'; return a;">
JSON
</a>
</li>
Я поместил тестовую часть втам, ну, чтобы проверить, будет ли предупреждение работать.Оно делает.Однако, когда я нажимаю кнопку для данных json, ничего не происходит.
Я неправильно подхожу к этому?Или мне чего-то не хватает?