【问题标题】:Getting the value of an item in a django template for loop在 django 模板中获取项目的值以进行循环
【发布时间】: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 中塞入额外的信息,然后将其切片以获得它的值?

【问题讨论】:

    标签: django forms django-models django-templates


    【解决方案1】:

    我在这里看到三个选项:

    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,如下所示:

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

      在查看功能中,您必须查看request.POST 中的所有数据并找到所有以delete-position 开头的项目,然后使用切片。

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多