2011-05-22 76 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開頭的項目,然後使用切片。