2016-09-12 4 views
0

DjangoでAJAXリクエストを行う特定のjsファイルを変数に伝える方法を解明しようとしています。Django:AJAXとパスのパラメータ

url(r'^post/(?P<post_id>\d+)/$', TemplateView.as_view('post.html')) 

そしてpost.htmlはJSONとしてポストをフェッチするAJAXリクエストを実行するスクリプトが含まれています:

post.html 

<script src="{{ STATIC_URL }}/js/post.js"></script> 
<div id="post-container"></div> 

は、我々は特定のビューにマップパスのparamでURLを持っていると言います

これはjsファイルです。ポスト(JSONとして)をjsプラグインで使用して特別な方法でそれを表示する必要があるため、このようにしてみましょう。

post.js 

$.ajax({ 
    url: '/post/??post_id??', 
    contentType: 'application/json' 
}) 
.done(function(post_data) { 
    togglePlugin(post_data); 
}); 

私の主な関心事はpost_idが適切な呼び出しを行うために、JSファイルからであるかを把握する方法です。

通常、これらの部分はDjangoでどのように接続されていますか?私が話している部分は、URL、パスパラメータ、ビュー、そしてアヤックスです。

答えて

0

あなたのURLに名前を追加する必要があり、そのためにあなたは、{% url %}テンプレートタグを使用する必要があり、あなたのテンプレートからURLを取得するには:

url(r'^post/(?P<post_id>\d+)/$', TemplateView.as_view('post.html'), name='my_name)

その後、あなたの中にテンプレートは、このようにURLを呼び出すことができます{% url 'my_name' object.pk %}thisを参照してください。あなたのjsのために別のファイルで作業し、あなたがDjangoの変数を渡したいとき

は、あなたが<script>インポートする前に、JSファイルを宣言し、あなたの変数が宣言する必要があります。

<srcipt>var foo={{django_var}}</script> 
<script src="{{ STATIC_URL }}/js/post.js"></script> 

をしてから使用します変数fooはjsです。

+0

'{%url ...%}'によって生成されたURLをjs変数に格納して、そのURLにajaxリクエストを実行できるようにするにはどうしたらいいですか?私は 'var url = {%url 'my_name' var1 var2}% 'を試しましたが、jsエラーが発生しました。 – dabadaba

+0

あなたは答えていませんが、自分自身で答えを見つけました: 'var url =" {%url 'my_name' var1 var2}%; "(二重引用符で囲みます)。 – dabadaba

0

post_id変数をdjangoテンプレートに渡すことができます。 しかし、 "傷つけたくない"場合は、.jsコード(スクリプト)をhtmlファイルに入れて、djangoでレンダリングします。だから、あなたはdjangoテンプレートタグを使うことができます。例えば

 var url = "/post/{{post_id}}"; 
     $.ajax({ 
      type: 'POST', 
      url: url, 
      dataType: 'json', 
      data: { 
       some_field: field_data, 
       some_other_field: field_data 
      }, 
      success: function(data) { 
       do_something(); 
      }, 
      error: function(data) { 
       do_somethin(); 
      } 
     }); 
+0

これは標準的な方法ですか?別のjsファイルではなく、テンプレートに直接スクリプトを置くことは悪い習慣のように聞こえます。 – dabadaba

+0

テンプレートのようにJSを解析する場合のみ。そして、これは悪いアプローチです。別の方法でそれを持つ必要がある場合は、あなたのpost_id変数のどこかに "隠す"必要があります。いくつかのボタン/フォームフィールドでは、cssはhiddenに設定されています。だから、jQueryやsmthを使ってフェッチすることができます。 – sebb

+0

はい、私はそれを考えましたが、それはひどい、ハッキーな考えのように思えます。 – dabadaba

関連する問題