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 模板变量