【问题标题】:Variable 'name' in a django template formDjango模板表单中的变量“名称”
【发布时间】:2011-09-01 04:17:23
【问题描述】:

我有以下模板,它有一个“添加”和“删除”按钮:

<tr>
    <td>Position</td>
    <td>{{ form.position }}<input type="submit" value="add" , name='add'/></td>
</tr>
<tr>
    <td> </td>
    <td>
        {% for position in positions %}
        {{ position}}<input type="submit" value="Delete", name="delete-position.{{ position }}"/> 
        {% endfor %}
    </td>
</tr>

如何构造views.py 函数来查找删除提交按钮的name 值?我目前有:

    try:
        request.POST['add']
        positions.append(request.POST['position'])          
        return render_to_response('registration/getting_started_info1.html', {'form': form, 'positions': positions}, context_instance = RequestContext(request))
    except: 
        if 'delete-position' in request.POST:
            positions.remove(### how to get name of Delete submit? ###)
            return render_to_response('registration/getting_started_info1.html', {'form': form, 'positions': positions}, context_instance = RequestContext(request))

另外,有没有更好的方法来构建视图/模板,以便我可以使用 if...else 而不是 try...except

【问题讨论】:

    标签: forms django-templates django-views


    【解决方案1】:

    首先,你应该这样做:

    if request.method == "POST":
        if 'add' in request.POST.keys():
            positions.append(...)
            return render_to_response(...)
        else:
            for k, v in request.POST.items():
                if k.startswith('delete-position'):
                    positions.remove(k)
                    return render_to_response(...)
    

    这应该对您的要求有所帮助...但是,我不确定这是否是您想要做的最简单的方法。

    【讨论】:

      【解决方案2】:

      你的 try-catch 有点奇怪。您可能应该将删除请求提交到不同的视图。

      但至于如何获得delete-position 变量,很简单:

      def delete(request):
          if request.method == "POST":
              for key in request.POST.keys():
                  if key.startswith('delete-position'):
                      positions.remove(request.POST[key])
      

      【讨论】:

        【解决方案3】:

        保存会话中的位置。

        【讨论】:

          猜你喜欢
          • 2011-06-26
          • 2017-01-29
          • 2012-08-29
          • 2017-03-22
          • 2017-01-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多