Django模板表单中的变量“名称”

Posted

技术标签:

【中文标题】Django模板表单中的变量“名称”【英文标题】:Variable 'name' in a django template form 【发布时间】: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

【问题讨论】:

【参考方案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】:

保存会话中的位置。

【讨论】:

以上是关于Django模板表单中的变量“名称”的主要内容,如果未能解决你的问题,请参考以下文章

在 django-crispy 按钮名称中使用 django 模板变量

使用更改 django 模板中表单字段的名称属性

Django:在带有前缀的模板中显示表单名称

将模板变量从 URL 传递到 Django 中的 FormPreview

使用 Form 标签在 Django 模板中获取模型的名称

将 Django 表单传递给模板标签