在 django 模板中获取项目的值以进行循环
Posted
技术标签:
【中文标题】在 django 模板中获取项目的值以进行循环【英文标题】:Getting the value of an item in a django template for loop 【发布时间】:2011-08-30 17:21:06 【问题描述】:使用 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】:我在这里看到三个选项:
为每个职位使用复选框字段和一个“删除”按钮。在这种情况下,用户可以选择要删除的多个职位,您可以轻松地从请求中获取他们的 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
开头的项目,然后使用切片。
【讨论】:
以上是关于在 django 模板中获取项目的值以进行循环的主要内容,如果未能解决你的问题,请参考以下文章
在循环的Django模板中,检查当前项目是不是与前一个项目不同