【发布时间】:2016-09-29 14:01:08
【问题描述】:
我试图弄清楚如何从我的模板发出 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 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'),
但给出错误:没有反向匹配。
【问题讨论】:
-
那么什么不起作用?
-
那你在寻求什么帮助?很明显,您知道如何使用 jQuery;你为什么不在那个事件处理程序中写一个
$.get()调用? -
再说一次,我不明白你在问什么。您的视图中没有提到模板,因此它不会返回有关缺少模板的错误。 URL 可以是任何你想要的;由于您是使用
url标记动态生成的,因此实际路径是什么没有区别。但所有这些都是绝对的 Django 基础,与 Ajax 没有任何关系;从 Django 的角度来看,Ajax 请求与任何其他请求完全相同。 -
@user1919 是的,您必须将视图添加到 urls.py 文件中,否则 django 将无法将请求分派到正确的视图(请求响应循环)。正如 Daniel Roseman 所指出的,路径是什么并不重要,因为您正在命名您的 url 并使用 url 模板标签调用该 url。只要确保它是独一无二的。我还想指出您的 urls.py 文件中有错字。 'test_download' 拼写错误(对于视图名称和 url 名称),这是没有反向匹配错误的原因。除非您只是在 SO 上有错字