2017-05-25 144 views
0

我非常非常新的jQuery和Ajax和現在,我已經建立了一個Django的論壇,應用,從而在主屏幕上,左側顯示forumposts列表,右側是空白。因爲我是AJAX新手,我已經構建了我的django應用程序,每當我點擊左側顯示的任何論壇帖子時,它都會將我重定向到顯示該帖子內容的詳細信息頁面。但是,我想通過使用AJAX來改善用戶體驗,因此無論何時單擊左側的任何論壇帖,右側的空白區都會更新並顯示該特定帖子的內容。Django的Ajax的GET請求

但我不是很清楚如何開始,因爲我是新來的jQuery/AJAX。有人能幫助我嗎?謝謝!

回答

0

因此,假設你想使這個服務器上(這是最簡單的解釋),這是相當簡單的。

給你的右邊欄的id這樣你就可以用jQuery引用它像$("#the-id-here");

使用$.get(),你可以做一個Ajax請求到服務器。您需要發送數據以查看您點擊的元素,以便django知道返回的結果。實踐中,請確保您可以創建一個簡單的django視圖,您可以使用$.get進行查詢,並查看是否可以返回響應。對於AJAX,您很可能需要django.http.HttpResponsedjango.http.JsonResponse

一旦你有你的終點設置和您確認,您可以用AJAX訪問它,你需要返回一些HTML。在您的項目中創建一個HTML模板。對於沒有呈現完整頁面的AJAX請求,我喜歡在我的模板目錄中創建一個名爲components/partials/的子文件夾。你不必,但它有助於保持組織。

對於呈現模板AJAX方法,我喜歡用render_to_string。這給了我一些自由,我想如何讓響應被格式化。例如,如果我想返回一些JSON其中包括HTML以及一些元數據,我可以這樣做:

return JsonResponse({ 
    "html": render_to_string("my_template.html", {"data": "abc"}), 
    "status": "ok" 
}) 

早在JavaScript中,你讓你的後Ajax調用你就會有一個成功的回調函數。在回調,你會想$("#your-element").html(/* response here */)

所以更新容器的HTML總結

  1. 創建與一個ID的HTML的容器,你可以選擇iwth jQuery的
  2. 創建Django的視圖,並驗證你可以做一個AJAX調用它
  3. 創建模板要呈現並送回
  4. 使用render_to_string和渲染模板如果您需要對響應進行更多控制。
  5. 在您的AJAX成功回調中,使用響應來填充呈現模板的容器。
+0

HI!非常感謝你的演練 - 儘管我仍然堅持ajax部分。在ajax函數下,有一個url:blahblahblah,我的url是一個django動態url,它需要幾個PK(教室中的pk,屬於教室的論壇中的pk2和中校中的pk3屬於論壇)。如果我使用動態網址(即{%url「教室:論壇:詳細信息」pk pk2 post.pk%}),這會導致錯誤,因爲pks未在腳本中加載。 – Yudi

+0

@Yudi關鍵是在你的模板中定義任何動態變量。在加載外部js文件之前,創建一個'