2017-11-26 5 views
-1

javascriptでajaxを使用して、htmlページにデータを送受信するデータベース情報を送受信しています。データを受け取ったらdiv要素に追加します。追加するすべてのオブジェクトには削除機能が必要です。 onclick='removeFile("{% url 'delete_file' model['pk'] %}");'フルラインは次のようになります。だから私は、そのオブジェクトの一意のIDJavaScriptのDjangoメソッドでTemplateSyntaxErrorが発生する

通るのonclick方法は、私の問題は、私は適切にこの呼び出しのための引用符でジャンゴurl方法をフォーマットするように見えることができないということです作成します:

$('#gallery tbody').append("<tr><td><a href='" + object['url'] + "'>" + object['file'] + "</a><span style='float:right'><button type='button' id='delete_button' class='btn btn-lg btn-danger' onclick='removeFile("{% url 'delete_file' model['pk'] %}");'></button></div></td></tr>") 

私が手にエラーがTemplateSyntaxエラーです

余り解析できませんでした。 'モデル[' PK ']'

から '[' PKを ']'

コンソールに'model['pk']'の値を記録すると、正しいIDが取得され、onclickメソッド(削除機能はありません)を削除すると正しくロードされます。私はこの

<button type="button" class="glyphicon glyphicon-remove-sign" onclick='removeFile("{% url 'delete_file' a.pk %}"); return false'> </button>どこaようhtmlに直接それを入れて試してみました

はジャンゴからのモデルオブジェクトであり、それが正常に動作します。

どうすればjavascriptの追加メソッドにonclickメソッドを正しく追加できますか?

フルjavascript関数はここにある:ダニエルは指摘したようにJavaScriptはクライアント側を実行しながら

 function GetObjects(){ 
      //Retrieves an updated list of objects and displays them on the page 
      $.post("{% url 'getobjects' %}",getCallback).fail(failCallback); 
     } 
     function getCallback(data){ 
      $('#gallery tbody').empty()//Empty the list 
      //Populate it 
      for(var i=0;i<data.length;i++){ 
       var model = data[i] 
       var object= model['fields'] 
       ///////////////ERROR LINE: 
       $('#gallery tbody').append("<tr><td><a href='" + object['url'] + "'>" + object['file'] + "</a><span style='float:right'><button type='button' id='delete_button' class='btn btn-lg btn-danger' onclick='removeFile("{% url 'delete_file' model['pk'] %}");'></button></div></td></tr>") 
      } 

     } 
     function failCallback(failMessage){ 
      console.log(failMessage.responseText) 
     } 
     GetObjects() 
+1

これはおそらく動作することはできません。 JavaScriptがブラウザに送られる前に、Djangoのテンプレートはクライアント側で完全にレンダリングされます。 –

+0

さて、別のonclickメソッドで回避する必要があると思います – Magnus

答えて

0

、Djangoの方法は、サーバ側に評価されます。ここでの私の問題への解決策は、同じURLを追加することでしたが、パラメータを指定せずに、同じURLを指すようにしました。したがって、テンプレートは正常にコンパイルされ、JavaScriptが実行されると、正しいURLに転送され、期待どおりに実行されます。ここで

は正しいjQueryのです:

$('#gallery tbody').prepend("<tr><td><a href='" + object['file_url'] + "'>" + object['file'] + "</a><span style='float:right'><button type='button' id='"+ model['pk']+"' class='glyphicon glyphicon-remove-sign ' onclick='removeFile(this)'></button></div></td></tr>") 

この機能eは通常のHTMLオブジェクトである

function removeFile(e){ 
     $.post("{% url 'delete_file' %}/" + e.id) 
} 

を実行するボタンを作成します。

urls.py

url(r'^delete_file/(?P<file_id>[-\w]+)$', views.delete_file, name='delete_file'), 
url(r'^delete_file$', views.delete_file, name='delete_file'), 
関連する問題