使用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
中填写其他信息,然后将其切片以获取其值?
答案 0 :(得分:2)
我在这里看到三个选项:
使用每个位置的复选框字段和一个“删除”按钮。在这种情况下,用户可以选择多个要删除的职位,您可以轻松地从请求中获取他们的ID。
使用隐藏字段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>
将位置ID插入名称属性,如下所示:
<input type="submit" value="Delete" name="delete-position.{{ position }} />
在视图功能中,您必须查看request.POST
中的所有数据,并查找以delete-position
开头的所有项目,然后使用切片。