#django #ajax
#django #ajax
Вопрос:
Когда я нажимаю кнопку на HTML-странице, я хочу запустить запрос в серверной базе данных, создав csv-файл, специфичный для запроса, а затем загрузить его.
Мне удалось передать данные django
, однако я не могу найти способ запустить загрузку, когда нажимаю кнопку, и я не знаю, как заставить ajax
accept django.http.HttpResponse
содержать csv.
Между тем я нахожу, что все в порядке, если я посещаю URL напрямую, но когда я использую ajax
, это не так.
Для иллюстрации,
Мой urls.py
:
url('export/',views.export)
Мой views.py
:
def export(request):
if request.method == 'GET':
export_list = json.loads(request.GET['id_list'])
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="somefilename.csv"'
writer = csv.writer(response)
writer.writerow(['column_1','column_2'])
for id in export_list:
item = Item.objects.get(id=id)
witer.writerow([item.attr_1,item.attr_2])
return response
И мой html
<a class="btn btn-primary" id="export" rel="external nofollow" role="button" style="margin-left: 30px;">export to csv</a>
$("#export").click( function(){
data.id_list = JSON.stringify(paperids);
data.csrfmiddlewaretoken = '{{ csrf_token }}';
$.ajax({
url: '/export/',
type: 'GET',
data: data,
dataType: "text/csv",
headers:{ 'Accept': 'text/csv','Content-Type': 'text/csv' };
success: function(result){
console.log(result);
},
error: fucntion(){
console.log("why");
}
})
Как я могу управлять загрузкой csv при нажатии кнопки?
Ответ №1:
Я считаю, что не Ajax
могу обработать запрос на загрузку. Теперь я отправляю данные через hidden input
in a form
и вместо этого возвращаю ответ на загрузку.