0

私のアプリケーションでは、このテンプレートを js でレンダリングする ajax 呼び出しを行います。

<div id="ajax_reply">
<div id="hidden_data" style="display:none;"></div>
<script type="text/javascript">
var data = [];
data.push(['Col1', 'Col2', 'Col3', 'Col4']);
{% for entry in mydata %}
  var dCell = [];
  dCell.push({{ entry.Col1 }});
  dCell.push({{ entry.Col2 }});
  dCell.push({{ entry.Col3 }});
  dCell.push({{ entry.Col4 }});
  data.push(dCell);
{% endfor %}
document.getElementById('hidden_data').innerHTML = JSON.stringify(data);
</script>
</div>

結果のjsをコンソールで手動で実行すると、divに挿入されますが、それ以外の場合、javascriptは実行されません。SO を検索しましたが、この正確なトピックに関する質問が見つかりませんでした。hidden_​​data はスコープ内にあり、何か提案はありますか?

編集: onload でラップした後にコンソールに表示されるコード (いくつか編集する必要がありましたが、コンソールで手動で実行すると機能します)

<div id="ajax_reply">
<div id="hidden_data" style="display:none;"></div>
<script type="text/javascript">
window.onload = function() {
    var data = [];
    data.push(['Col1', 'Col2', 'Col3', 'Col4']);

      var dCell = [];
      dCell.push('1233');
      dCell.push('123312');
      dCell.push('1233');
      dCell.push('1482.61');


      data.push(relation);

      var dCell = [];
      dCell.push('1231');
      dCell.push('2112.0');
      dCell.push('1231');
      dCell.push('123123.00');


      data.push(relation);

  document.getElementById('hidden_data').innerHTML = JSON.stringify(relationsData);
};
</script>
</div>
4

2 に答える 2

1

entry.Col1に文字列「my text」が含まれている場合、結果のテンプレートには次のような行が表示されます。

dCell.push(my text);

そして、私はあなたが必要だと思います

dCell.push('my text');
于 2012-06-26T21:19:56.440 に答える
0

DOM がロードされた後にこれが実行されていることを確認してください。

次のようにスクリプトをラップしてみてください。

window.onload=function(){
    //script here
}

jsfiddleで、これが機能していることがわかります。


アップデート:

Django はハードコードされたサンプル データで動作するため、Django がデータを挿入する方法に問題があるようです。潜在的な JavaScript エスケープの問題を処理するには、 escapejsテンプレート フィルターを試してください。特に改行と「&」記号を使用して、以前に同様の問題をデバッグする必要がありました。

dCell.push("{{ entry.Col1|escapejs }}");
于 2012-06-26T21:23:21.027 に答える