2011-07-01 69 views
5

我正嘗試使用AJAX創建站點導航。我有導航菜單,包含指向不同視圖的鏈接(在模板中使用{% url name %})。我想要做的是使用AJAX加載頁面內容。我嘗試加載的頁面內容包含在內容塊({% block content %})中。在Django中使用AJAX切換頁面

我還發現這個片段http://djangosnippets.org/snippets/942/,但我想使用我已經定義的視圖,只使用ajax獲取內容。

有什麼建議嗎?

+0

你用django-pjax解決了嗎? –

+0

基本上我做過。 (對原始腳本進行少量更改以允許我在單個請求中更新多個HTML元素) –

回答

6

你應該使用django-pjax這是專爲這種事情而建造的。

您只需要在基本模板中包含整個頁面或根據請求是否爲ajax包含block content

django-pjax使用jQuery進行AJAX調用,並使用HTML5推送狀態API處理歷史記錄,這是一種非常好的方式,並且在IE舊版本中也能夠正常降級。

+0

這實際上非常酷。謝謝 –

+0

如果它可以與Django 1.2一起使用,它會很棒。 – Paolo

3

當AJAX看到東西時,像{% block content %}這樣的模板標籤早已消失。你要做的是創建一個名爲您的內容塊<div>,如:

{% block content %} 
<div id="content"></div> 
{% endblock content %} 

然後你可以使用這樣的事情(jQuery的)代碼加載<div>需要的時候:

$("#content").load(url, data, loadComplete); 

哪裏url是你想要加載的URL(HTML期望作爲回報),data是表單數據(如果有的話;可以省略),loadComplete是數據加載時要調用的可選函數,形式爲function loadComplete(responseText, textStatus, XMLHttpRequest) {...} 。即使你不想使用jQuery,你也可以得到非縮小的jQuery源代碼,並看看它們是如何實現的。

+0

我知道它已經不存在了,我有一個類似於你所建議的div。我想在這裏做的事情是使用已定義的視圖(這將使用沒有ajax請求),並創建一些響應,將只返回名爲內容塊的內容,以便我可以在JavaScript中處理它,並將div的內容。 –