1

コードのように url に変数を挿入したい。しかし、エラーが発生します。

   function initializeDataTable(id){
        var columnSize = $('table th').size();
    $('#table').dataTable({
        "sDom" : 'rtFip>',
        'fnDrawCallback' : function() {
            $('input:checkbox, input:radio').checkbox();
        },
        "bStateSave": true,
        'sPaginationType' : 'full_numbers',
        "bServerSide" : true,
        "sAjaxSource" : "{% url 'get_menu_list' '" + id + "' %}"
   });
  };

選択したオプションを取得したいので、オプション変更イベントで上記の関数を呼び出します。どうやってやるの?

4

3 に答える 3

2

あなたはこれを行うことはできません:

"sAjaxSource" : "{% url 'get_menu_list' '" + id + "' %}"

{% %}サーバー側のディレクティブです。サーバーはそれらを処理し、応答ページに入れます。JavaScript 関数はクライアント側で実行されます。サーバーと通信して、ここで期待した方法でデータを要求することはできません。次のように、サーバーに依存しないことを行う必要があります。

"sAjaxSource": "/get_menu_list/" + id
于 2012-07-09T20:12:20.777 に答える
0

次に、url を変数として関数に渡すことができます。

<script>
function initializeDataTable(data_url) {
    var columnSize = $('table th').size();

    $('#table').dataTable({
        "sDom" : 'rtFip>',
        'fnDrawCallback' : function() {
            $('input:checkbox, input:radio').checkbox();
        },
        "bStateSave": true,
        'sPaginationType' : 'full_numbers',
        "bServerSide" : true,
        "sAjaxSource" : data_url
   });
}

$(function(){
    initializeDataTable("{% url 'get_menu_list' item.id %}");
});
</script>

URL でトークンを使用できます。

<script>
var url_pattern = "{% url 'get_menu_list' '{id}' %}";
function initializeDataTable(id) {
    var columnSize = $('table th').size();

    $('#table').dataTable({
        "sDom" : 'rtFip>',
        'fnDrawCallback' : function() {
            $('input:checkbox, input:radio').checkbox();
        },
        "bStateSave": true,
        'sPaginationType' : 'full_numbers',
        "bServerSide" : true,
        "sAjaxSource" : url_pattern.replace('{id}', id)
   });
}

$(function(){
    initializeDataTable(42);
});
</script>

正常に解決するには、トークンが正規表現タイプと一致する必要があることに注意してください ({id}で定義されている場合はトークンとして使用できません。\d+代わりに を使用して0000ください)。

私はこの解決策に少し不満があり、django: django.jsで JavaScript を処理する独自のアプリケーションを作成することで終了しました。

このアプリケーションでは、次のことができます。

{% load js %}
{% django_js %}
<script>
function initializeDataTable(id) {
    var columnSize = $('table th').size();

    $('#table').dataTable({
        "sDom" : 'rtFip>',
        'fnDrawCallback' : function() {
            $('input:checkbox, input:radio').checkbox();
        },
        "bStateSave": true,
        'sPaginationType' : 'full_numbers',
        "bServerSide" : true,
        "sAjaxSource" : Django.url('get_menu_list', id)
   });
}

$(function(){
    initializeDataTable(42);
});
</script>

URL が Django.js によって読み込まれるようにするには、次のreadyイベントをリッスンします。

// Wait for document ready
$(function(){
    initializeDataTable(42);
});

// Wait for Django ready
Django.onReady(function(){
    initializeDataTable(42);
});
于 2012-11-02T19:11:12.517 に答える
0

サーバー側とクライアント側を混同したと思います。この作品

 "{% url 'get_menu_list' '" + id + "' %}"

サーバー側で解釈する必要があります。それまでに、サーバー側はまだ「id」が何であるかを知りません。

于 2012-07-09T20:13:10.130 に答える