我想要一个简单的编辑/删除表单在Django。Django添加/删除表单没有多次提交
我希望它看起来像:
Item A edit/ remove
Item B edit/ remove
Item C edit/ remove
我想编辑和删除“按钮”是超链接,或者至少看起来像他们一样。
有没有一种简单的方法无需多次提交按钮(和不违反整个POST/GET的东西?)
我想要一个简单的编辑/删除表单在Django。Django添加/删除表单没有多次提交
我希望它看起来像:
Item A edit/ remove
Item B edit/ remove
Item C edit/ remove
我想编辑和删除“按钮”是超链接,或者至少看起来像他们一样。
有没有一种简单的方法无需多次提交按钮(和不违反整个POST/GET的东西?)
你可能会做最好不要使用表格来实现这一点,因为有(从你”已经描述过)不需要表单元素。
相反,你可以有一个安装在你的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>
...或东西全部效果......
创建独立的形式每个条目的元素。在迭代模板中每个项目的表单时,将item.id包含为隐藏字段。
这是一个简单的方法来使用基于POST的删除多个项目,重要的是如果你想防止CSRF攻击。
我做了这样的一个类似的问题: 把这个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。
谢谢。我已经实现了这一点。虽然它使用GET,并因此破坏了一些标准(使用GET从数据库中删除)。当它如此困难时,你如何遵循标准? (无需使用CSS控制的提交按钮编写多个提交表单)... – geejay 2009-09-11 14:13:57