2013-12-19 39 views
0

我是Django的新手,但我是其他框架中的高級程序員。如何在不使用任何模板的情況下獲得HTTPRequest JSON響應?

什麼我打算做:

按下一個表單按鈕,觸發的JavaScript將觸發該由Django視圖處理一個Ajax請求(創建一個文件)回到平原簡單的JSON數據(名該文件) - 並附加爲名爲'downloads'的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>') 
    }) 
+0

看起來像你的AJAX請求調用其他代碼片段。可以從Django視圖服務JSON並且您的代碼看起來不錯。 – niekas

+0

render_to_string(current_app +'/ json_download_link.html'...)的輸出是什麼樣的? –

+0

我添加了信息,請參閱我的編輯 – tector

回答

0

我不明白你的問題。當然,您可以在不使用模板的情況下發出Ajax請求。如果您不想使用模板,請不要使用模板。如果你只是想返回JSON,那就這樣做。

沒有任何問題的細節,我會想象你的Ajax請求沒有打到你認爲是的視圖,而是轉到原始的整頁視圖。嘗試在視圖中添加一些日誌記錄以查看發生了什麼。

+0

以上正確的視圖處理,我通過測試輸出檢查它。 當我做某事。例如: 返回HttpResponse(json.dumps({'foo':'bar'}),content_type =「application/json」) 結果是一樣的:完整的DOM將被複制並追加到只有文件名鏈接應附加.. – tector

+0

對不起,這是不可能的。這不是來自你的觀點,我只能說。 Django不會在沒有被告知的情況下重新創建整個頁面。 –

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") 

這是你在找什麼?

+0

我添加了信息,請參閱上面的編輯 – tector

+0

好的。我沒有得到它..你想要你的輸出是什麼? – user3030969

+0

plain JSON: {「filename」:「example.csv」} – tector

相關問題