2011-05-22 50 views
0

使用django,我有一个表单,用户输入他的'position'。用户可以添加多个职位。用户也可以删除职位。有两点值得注意:在django模板中获取项目的值for循环

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中补充附加信息,然后将其切片以获得其价值?

回答

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为name属性,就像这样:

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

    鉴于功能你必须通过所有的数据看起来在request.POST,发现所有以delete-position开头的项目,然后使用切片。