ajax - Django 如何向視圖發出ajax請求

  显示原文与译文双语对照的内容
76 3

為了在按鈕上執行視圖,我正在嘗試從模板中製作一個ajax請求( 使用 jquery ) 。我不想重定向到其他頁面。我只需要在視圖中執行代碼。

這是我的按鈕單擊事件:

$(document.body).on("click","#download_xls",function(e) {
 selected_country = ($("#button-countries").val())
 selected_subareas = $('#_all_values').val();
 id ="?country=" + selected_country +"&" +"regions=" + selected_subareas
 whole_url ="{% url 'test_download' %}" + id
 $("#download_xls").attr("href", whole_url)
 });

當我傳遞URL中的值時,我甚至不需要通過ajax請求傳遞一些參數。我只需要在視圖中執行代碼。

視圖類似於以下內容:

def test_download(request):
 print(request.GET.get('country'))
 print(request.GET.get('regions'))
 fileContent ="Your name is %s"
 res = HttpResponse(fileContent)
 res['Content-Disposition'] = 'attachment; filename=yourname.txt'
 return res

編輯

我在模板中添加了ajax獲取請求,如下所示:

 whole_url ="{% url 'test_download' %}"+id
 $.ajax({
 type:"GET",
 url: whole_url,
 success: function(data) {
 alert('sd')
 },
 error: function(data) {
 alert('error')
 },
 });

因為沒有相應的模板用於這裡視圖,我得到了一個錯誤。我想我需要在 urls.py 文件中添加一些東西。

我在這裡讀到 ,我需要修改:

url(r'^link-to-fun1$', views.fun1),

但我不清楚什麼是 link-to-fun1.我試過:

 url(r'^create$', 'test_download', name='test_downlad'),

但給出了一個錯誤:沒有反向匹配。

时间:原作者:0个回答

74 4

你可以使用 TemplateView 添加到你的url,並使用JQuery做一些事情,如下所示:

views.py

class ajax_view(TemplateView):
 def get(self, request, *args, **kwargs):
 id_value = request.GET['id']
 value = Model.objects.filter(id=id)
 data = serializers.serialize('json', value, fields=('fieldone'))
 return HttpResponse(data, content_type='application/json')

urls.py

url(r'^ajax/$', ajax_view.as_view()),

jQuery

$.ajax({
 data: { 'id': id },
 url: '/ajax/',
 type: 'get',
 success: function (data) {
//Do something with the data
 }
 })

這通常是如何在 Django 中使用Ajax的,重要的是 TemplateView的使用

原作者:
...