我想在Django中使用简单的编辑/删除表单。
我希望它看起来像:
Item A edit / remove
Item B edit / remove
Item C edit / remove
我想编辑并删除“按钮”作为超链接,或者至少看起来像。
有没有多个提交按钮的简单方法(并且没有违反整个POST / GET的事情?)
答案 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。