Django添加/删除表单,无需多次提交

时间:2009-09-10 14:24:51

标签: django forms

我想在Django中使用简单的编辑/删除表单。

我希望它看起来像:

Item A   edit  /   remove
Item B   edit  /   remove
Item C   edit  /   remove

我想编辑并删除“按钮”作为超链接,或者至少看起来像。

有没有多个提交按钮的简单方法(并且没有违反整个POST / GET的事情?)

3 个答案:

答案 0 :(得分:2)

你可能最好不要使用Form来实现这一点,因为(根据你所描述的),不需要任何表单元素。

相反,你可以设置一个urls.py有2个网址的设置,

url(r'^app/edit/(?P<id>.*)$', edit_view, name='item_edit'),
url(r'^app/remove/(?P<id>.*)$', remove_view, name='item_remove'),

上面描述的界面是由一个模板生成的,该模板只使用{%url%}标签来建立这些地址的超链接。比方说,例如,您在上下文中传递变量'items',模板代码看起来像这样

<table>
{% for item in items %}
    <tr>
      <td>{{item.name}}</td>
      <td>{% url 'item_edit' item.id %}</td>
      <td>{% url 'item_remove' item.id %}</td>
    </tr>
{% endfor %}
</table>

...或其他所有影响......

答案 1 :(得分:1)

为每个条目创建单独的表单元素。在迭代模板中每个项目的表单时,将item.id包含为隐藏字段。

这是一种在多个项目上使用基于POST的删除的简单方法,如果您想要阻止CSRF攻击,这很重要。

答案 2 :(得分:1)

我为类似的问题做了类似的事情: 把这个javascript放在你的模板中:

<script language="javascript">function submit(item_id){
document.myform.item_to_delete.value = item_id;
document.myform.submit();
}
</script>

使用您的模板为每个项目创建此删除超链接:

<a href="javascript:submit({{ item_id }});">Delete</a>

将这个隐藏的表单放在页面的某个位置:

<form name="myform" method="post" action="/view_to_handle_delete/"><input name="item_to_delete" type="hidden" value=""></form>'

基本上,每个项目都有一个删除超链接,它调用js submit函数并将项目传递给delete。 js函数submit为此项设置一个隐藏的输入值,然后使用该输入提交表单,从而通过POST将值传递给url / view_to_handle_delete /,并在那里处理它就像一个普通的post请求。这里item_id将被称为item_to_delete。