在pickerselect选择之后,Django模板没有刷新循环

时间:2015-12-03 20:04:32

标签: javascript django twitter-bootstrap

我需要更新一个html表格单元格,一旦选择了pickerselect,就会使用Django模板for循环创建。我的桌面HTML:

        <tbody>
            {% for task in tasks %}
            <tr>
                <td>{{ task.taskNumber }}</td>
                <td>{{ task.taskDescription }}</td>
                <td><div name="dataOutput">{{task.thisPeriod}}</div></td>
            </tr>
            {% endfor %}
        </tbody>

我的用于pickerselect的HTML:

    <select name="selValue" class="selectpicker">
        <option value="1">Current Period ({{currentPeriod}})</option>
        <option value="2">Previous Period ({{previousPeriod}})</option>
    </select>

我的javascript:

<script language="JavaScript">
  $(function() {
      $('.selectpicker').on('change', function(){
        var selected = $(this).find("option:selected").val();
        var updateArray = document.getElementsByName("dataOutput");
        for (var i = 0; 1 < updateArray.length; i++) {
            if (selected == 1) {
                updateArray[i].innerHTML = "{{task.thisPeriod}}";
            } else if (selected == 2) {
                updateArray[i].innerHTML = "temp";
            } 
         }
      });
    });
  </script>

此时,当进行选择2时,表行值将使用占位符“temp”更新,但当我更改回选择1时,表中不会显示任何值。我假设这是因为没有刷新Django模板for循环,所以它不知道如何为循环{{task.thisPeriod}}中的特定任务进行渲染。我已经查看了一些关于使用javascript刷新div的问题,但没有任何效果......我总是得到表中空值的相同结果。

1 个答案:

答案 0 :(得分:0)

这很明显,但你不能这样做,因为javascript没有记录你传递给模板的tasks django上下文。您应该使用ajax将所选值传递给views.py中的单独方法,在那里您找到数据并将其返回到javascript,然后使用新数据呈现div