2009-09-10 27 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。