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 'get_menu_list' '" + id + "' %}"

应该在服务器端解释。到那时服务器端还不知道'id'是什么。

于 2012-07-09T20:13:10.130 回答
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>

您可以在您的网址中使用令牌:

<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 处理 javascript:django.js

使用此应用程序,您可以:

{% 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>

要确保 Django.js 加载 url,请监听ready事件:

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

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