对于Javascript变量(Django)内部的循环迭代

时间:2016-06-27 16:03:42

标签: javascript python html django twitter-bootstrap

我正在尝试使用django中的选择器实现下拉菜单。我在寻找一款看起来很棒的软件方面取得了很大进展!

http://nelrohd.github.io/bootstrap-dropdown-checkbox/

然而,我却陷入了如何让它变得更有活力的问题。

最终目标是拥有一个过滤器选项,该选项由我可以选择和取消选择的应用程序列表组成,以便更改输出到屏幕的内容。

软件的工作方式是通过jQuery选择器接收单个变量:

    var myData = [{id: 1, label: "Test" }];
    $(".myDropdownCheckbox").dropdownCheckbox({
      data: myData,
      title: "Dropdown Checkbox"
    });

现在我只能使用vars的硬编码属性

    var data =[ 
        { id: "1", label: "Option 1", isChecked: true },
        { id: "2", label: "Option 2", isChecked: true },
        { id: "3", label: "Option 3", isChecked: true},
        { id: "4", label: "Option 4", isChecked: true },
        { id: "5", label: "Option 5", isChecked: true },
        { id: "6", label: "Option 6", isChecked: true},
        { id: "7", label: "Option 7", isChecked: true },
        { id: "8", label: "Option 8", isChecked: true },
        { id: "9", label: "Option 9", isChecked: true },
        { id: "10", label: "Option 10", isChecked: true },
    ];

我想找到一种方法来使这些属性可迭代并能够从django数据库中提取列表:(类似于:)

    var data=[
        for( var i = 0; i<=10, i++)
        {id: (i), label: (list(i)), isChecked: true},
    ]

我曾尝试使用django模板标签,但似乎无法正常工作。我的问题是:是否可以迭代for循环来为变量创建属性?

3 个答案:

答案 0 :(得分:0)

你试过了吗?

var data = [];

for (var i = 0; i <= 10; i++) {
  data[data.length] = { id: (i + 1), label: 'Option ' + (i + 1), isChecked: true };
}

答案 1 :(得分:0)

如果你在Django中生成列表,你可以这样做:

  1. 我假设您有一个要在Javascript中序列化的任意对象的列表。当您准备将其传递给响应上下文时,请使用以下内容进行转换:mark_safe(json.dumps([{'id': element.id, 'label': element.label, 'isChecked': element.is_checked} for element in mylist]))。这只是一个例子,因为我不知道你要渲染哪些对象。
  2. 假设这样安全且转储的json被发送到foo上下文变量:

    var data = {{ foo }};
    
  3. 如果你想在纯粹的javascript中生成选项,那就什么都不是djangoish。像@AlexandreThebaldi这样的简单js for循环可以解决。

答案 2 :(得分:0)

我会仔细检查以确保您正确设置了Django标记。通过将选项集作为上下文传递它应该看起来像这样:

{% for opt in options %}
     {id: {{ forloop.counter }}, label: {{ opt }}, isChecked: true}
{% endfor %}