在 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模板中,检查当前项目是不是与前一个项目不同

访问中间件值以测试Django DetailView

Django模板,如果它们的id等于父循环名称,则循环遍历项目

如何在 django 模板中从 for 循环中转义一行

如何获取相关项目的列表并在 Django 中应用模板过滤器

Vue。如何在循环 v-for 中获取 prev 和 current 值以进行比较?