【发布时间】:2013-12-19 14:48:38
【问题描述】:
我是 Django 新手,但我是其他框架的高级程序员。
我打算做什么:
按下表单按钮,触发触发 Ajax 请求的 Javascript,该请求由 Django 视图(创建一个文件)处理,该视图返回简单的 JSON 数据(文件名) - 并作为链接附加到名为“下载”的 DOM 元素。
到目前为止我所取得的成就:
按下按钮,触发 js 触发一个 ajax 请求,该请求由 Django 视图处理(创建一个文件),该视图返回作为副本附加到名为“downloads”的 DOM 元素的整个页面(而不是简单的 JSON 数据)。
这是从相应的 Django 视图中提取的代码:
context = {
'filename': filename
}
data['filename'] = render_to_string(current_app+'/json_download_link.html', context)
return HttpResponse(json.dumps(data), content_type="application/json")
我尝试了几种变体(如https://stackoverflow.com/a/2428119/850547),有和没有RequestContext对象;不同的渲染策略..我现在没有想法..
在我看来,如果不使用响应中的模板,就不可能发出 ajax 请求.. :-/(但我希望我错了) 但即便如此:为什么 Django 返回我没有传递给上下文的主模板(带有完整的 DOM)...... 我只想要 JSON 数据 - 没有更多!
我希望我的问题是可以理解的...如果您需要更多信息,请告诉我,我会添加它们。
编辑:
对于即将到来的问题 - json_download_link.html 如下所示:
<a href="{% url 'foobar:download' customer filename %}">Download</a>
但我什至不想使用它!
对应的jquery:
$.post(url, form_data)
.done(function(result){
$('#downloads').append('<a href="'+baseUrl+'/download/'+result['filename']+'" title="download"> Download CSV</a>')
})
【问题讨论】:
-
似乎您的 AJAX 请求调用了其他 sn-p 代码。可以从 Django 视图中提供 JSON,并且您的代码看起来不错。
-
render_to_string(current_app+'/json_download_link.html'...) 的输出是什么样子的?
-
我添加了信息,请参阅上面的编辑
标签: ajax django json httprequest