2017-05-25 18 views
0

私は非常にjqueryとajaxの新機能を使用しています。今ではホーム画面では、左側にはforumpostsのリストが表示され、右側には空白が表示されます。私はAJAXを初めて使ったので、左に表示されているforumpostsのいずれかをクリックするたびに、その記事の内容を示す詳細ページにリダイレクトされるように、私はdjangoアプリケーションを構築しました。しかし、私はAJAXを使ってユーザーエクスペリエンスを向上させたいのですが、左側のforumpostをクリックするたびに、右側の空白が更新され、その特定の投稿の内容が表示されます。Django Ajax GET request

しかし、私はjquery/ajaxを初めて使うので、どのように始めたらよいか分かりません。誰かが私を助けることができますか?ありがとうございました!

答えて

0

これをサーバ上でレンダリングしたいとします(これは説明が簡単です)。これはかなり簡単です。

はそうあなたが$.get()を使用し$("#the-id-here");

のようにjQueryを使ってそれを参照することができ、あなたのサーバへのAJAX要求を行うことができ、あなたの右のサイドバーidを与えます。あなたがクリックしている要素のデータを送る必要がありますので、djangoはどのような結果を返すかを知っています。実際には、$.getで照会できる単純なジャンゴビューを作成し、応答を返すことができるかどうか確認してください。 AJAXの場合は、django.http.HttpResponseまたはdjango.http.JsonResponseのいずれかがほしいでしょう。

エンドポイントの設定が完了し、AJAXでアクセスできることを確認したら、いくつかのHTMLを返す必要があります。プロジェクトにHTMLテンプレートを作成します。私がフルページをレンダリングしていないAJAXリクエストの場合、テンプレートディレクトリにcomponents/またはpartials/というサブフォルダを作成したいと思います。あなたはそうする必要はありませんが、物事を整理しておくのに役立ちます。

テンプレートをレンダリングするAJAXメソッドの場合は、render_to_stringを使用します。これにより、私はどのように応答をフォーマットする必要があるかについて、私にいくつかの自由が与えられます。私はHTMLだけでなく、いくつかのメタデータを含んでいるいくつかのJSONを返すしたい場合たとえば、私が行うことができます:バックJavaScriptで

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

は、あなたが行った後、あなたのAJAXは、成功コールバック関数があるでしょうあなたを呼び出します。コールバックでは、 $("#your-element").html(/* response here */)

で、コンテナのHTMLを更新することになるでしょうあなたがiwthを選択することができますIDでHTML内のコンテナを作成します

  1. を要約するjQueryの
  2. 作成Djangoのビューとrender_to_stringとを使用してテンプレートをレンダリングし
  3. バックレンダリングされ、送信されますあなたのテンプレートを作成します
  4. 、あなたがそれにAJAX呼び出しを行うことができます検証応答をより詳細に制御する必要がある場合はを入力します。
  5. AJAX成功のコールバックでは、応答を使用して、レンダリングされたテンプレートでコンテナを塗りつぶします。
+0

HI!ウォークスルーをありがとう、私はまだAJAXの部分にはまっています。 ajax関数の下には、blahblahblahというURLがあります。私のURLは、いくつかのPKsを取り込むジャンゴーダイナミックなURLです(クラスルーム用のpk、教室に属するフォーラム用のpk2、ポスト用のpk3これはフォーラムに属します)。動的URLを使用した場合(つまり、{%url "classroom:forum:detail" pk pk2 post.pk%})、スクリプトにpksがロードされていないのでエラーになります。 – Yudi

+0

@Yudiキーは、テンプレート内の動的変数を定義することです。外部のjsファイルを読み込む前に、 '