如何在不使用任何模板的情况下获取HTTP请求JSON响应?

时间:2013-12-19 14:48:39

标签: ajax django json httprequest

我是Django的新手,但我是其他框架中的高级程序员。

我打算做什么:

按一个表单按钮,触发激活Ajax请求的Javascript,该请求由Django View处理(创建一个文件),返回简单的简单JSON数据(文件的名称) - 并作为链接附加到DOM-Element命名为'downloads'。

到目前为止我所取得的成就:

按下按钮,触发触发ajax请求的js,该请求由Django视图处理(创建一个文件),该请求返回作为副本附加的整个页面到名为'downloads'的DOM-Element(而不是简单的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>')
    })

2 个答案:

答案 0 :(得分:0)

我不明白你的问题。当然,您可以在不使用模板的情况下发出Ajax请求。如果您不想使用模板,请不要使用模板。如果你只想返回JSON,那就去做吧。

如果没有任何问题的细节,我会想象你的Ajax请求没有达到你认为的那个视图,而是进入原始的整页视图。尝试在视图中添加一些日志记录,看看发生了什么。

答案 1 :(得分:0)

无需返回完整模板。您可以返回模板的部分并在前端渲染/追加它们。

模板可以根据需要小。例如,这是一个模板:

name.html
<p>My name is {{name}}</p>

您只能使用json.dumps()返回此模板,并将其附加在前端。

你的json_download_link.html是什么?

假设example.csv是字符串

data ={}
data['filename'] = u'example.csv'
return HttpResponse(simplejson.dumps(data), content_type="application/json")

这是你在找什么?