如何向视图发出ajax请求

时间:2016-05-31 13:53:02

标签: ajax django

我试图找出如何从我的模板中创建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

EDITED

我在模板中添加了ajax GET请求:

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

我收到错误,因为此视图没有相应的模板。我想我需要在urls.py文件中添加一些内容。

我读了here我需要将urls.py修改为:

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

但我不清楚应该是什么链接到fun1。 我试过了:

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

但是给出了一个错误:没有反向匹配。

1 个答案:

答案 0 :(得分:3)

您可以使用TemplateView添加到您的网址并使用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