2009-09-10 26 views
1

我想要一个简单的编辑/删除表单在Django。Django添加/删除表单没有多次提交

我希望它看起来像:

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

我想编辑和删除“按钮”是超链接,或者至少看起来像他们一样。

有没有一种简单的方法无需多次提交按钮(和不违反整个POST/GET的东西?)

回答

2

你可能会做最好不要使用表格来实现这一点,因为有(从你”已经描述过)不需要表单元素。

相反,你可以有一个安装在你的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%}标签进行超链接到那些地址。说,例如,你传递你的上下文中的变量“项目”,你的模板代码看起来像这样

<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

谢谢。我已经实现了这一点。虽然它使用GET,并因此破坏了一些标准(使用GET从数据库中删除)。当它如此困难时,你如何遵循标准? (无需使用CSS控制的提交按钮编写多个提交表单)... – geejay 2009-09-11 14:13:57

1

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

这是一个简单的方法来使用基于POST的删除多个项目,重要的是如果你想防止CSRF攻击。

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>' 

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