获取django模板中项目的值以进行循环

时间:2011-05-22 19:43:09

标签: django forms django-models django-templates

使用django,我有一个表单,用户可以在其中输入'position'。用户可以添加多个位置。用户还可以删除位置。有两点值得注意:

1)在表单中,有两个按钮,'Add''Delete'

2)我在模板中使用for循环来填充位置列表并删除按钮。

这就是我目前所拥有的:

# in template
<tr>
    <td>Position</td>
    <td>{{ form.position }} 
        <input type="submit" value="Add" , name='action'/>
    </td>
</tr>
<tr>
    <td> </td>
    <td>
        {% for position in positions %}
            {{ position}}
            <input type="submit" value="Delete {{position }}", name='action'/> 
        {% endfor %}
    </td>
</tr>

# in views.py
    ...
    if action == 'Add':
        positions.append(request.POST['position'])
        return render_to_response(...)
    if 'Delete' in action:
        positions.remove(request.POST['action'][7:])
        return render_to_response('...)

这似乎是执行“删除”部分的一种非常不优雅的方式。

有没有更好的方法来获取position的值,而无需在'Delete' submit button中填写其他信息,然后将其切片以获取其值?

1 个答案:

答案 0 :(得分:2)

我在这里看到三个选项:

  1. 使用每个位置的复选框字段和一个“删除”按钮。在这种情况下,用户可以选择多个要删除的职位,您可以轻松地从请求中获取他们的ID。

  2. 使用隐藏字段position和一些Javascript来填充它。如果你使用jquery,它可能是:

    <input type="hidden" name="position" value="" />
    
    {% for position in positions %}
      <input type="submit" value="Delete" name="action" data-position="{{ position }}" />;
    {% endfor %}
    
    <script type="text/javascript">
       var $position_input = $("input[name='position']");
       $("input[name='action'][value='Delete'].click(function(e) {
          var $this = $(this);
          var position = $this.data("position");
          $position_input.val(position);
       });
    </script>
    
  3. 将位置ID插入名称属性,如下所示:

    <input type="submit" value="Delete" name="delete-position.{{ position }} />
    

    在视图功能中,您必须查看request.POST中的所有数据,并查找以delete-position开头的所有项目,然后使用切片。