我试图找出如何从我的模板中创建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'),
但是给出了一个错误:没有反向匹配。
答案 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