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的使用

原作者:
...