2011-05-04 67 views
0

我無法弄清楚如何在django中引用表單的(變量)名稱。這是我目前擁有的代碼:善有善報在{{ email.id }}views.py文件正確引用形式引用django中的變量表單ID

{% for email in email_list %} 
<table> 
<tr> 
    <td><form action="/emails/edit/" method="post"> 
    {% csrf_token %} 

    <input type="text" name="{{ email.id }}" value=" {{email}}"></td> 
    <td><input type="submit" value="Edit" name="action"></td> 
    <td><input type="submit" value="Delete" name="action"></td> 
</tr> 
</form> 
</table> 
{% endfor %} 

<p>Add new</p> 
    <form action="/emails/edit/" method="post"> 
    {% csrf_token %} 
    <input type="text" value="" name="add_email"> 
    <input type="submit" value="Add" name="action"> 

def email_edit(request): 
    email_list = Email.objects.order_by('email') 
    if request.POST: 
     action = request.POST.get('action') 
     if action == "Add": 
      Email.objects.create(email=request.POST['add_email']) 
      return HttpResponseRedirect('/emails/edit/') 
     if action == 'Delete': 
      Email.objects.filter(id={{ emails.id }}).delete() 
      return HttpResponseRedirect('/emails/edit/') 
     if action == "Update": 
      Email.objects.filter(id= {{ emails.id }}).update(name=request.POST[{{ emails.id }}]) 
      return HttpResponseRedirect('/emails/edit/')) 

email_edit.html

回答

3

不要粗魯,我想你可能想退後一步,試圖完成。您有要編輯或刪除的電子郵件列表。您並不需要提交表單以進入另一個視圖,在這個視圖中您將編輯或刪除其中一個記錄。

你最肯定需要一個窗體上的編輯或刪除視圖來發表您的價值觀,但在這個名單的情況,我99.9%肯定,你只需要一個錨標記進行編輯或刪除:

{% for email in email_list %} 
<table> 
    <tr> 
     <td>{{email}}></td> 
     <td><a href="{% url edit_email email.id %}">Edit</a></td> 
     <td><a href="{% url delete_email email.id %}">Delete</a></td> 
    </tr> 
</table> 
{% endfor %} 

希望有道理。

[Followup Answer] 考慮到您設置的代碼,我會讓每一行都是它自己的格式,並且電子郵件字段需要具有非動態名稱。否則,在request.POST集合中訪問該值會更加困難。以下是我如何設置:

#views.py 
from django.shortcuts import render 

def my_view(request): 
    email_list = MyModel.objects.all() 
    if request.method == 'POST': 
     email = request.POST.get('email') 
     action = request.POST.get('action') 
     if action == 'Edit': 
      #do edit 
     else: 
      #do delete 
    return render(request, 'template.html', {'email_list' : email_list}) 

#template.html 
{% for email in email_list %} 
<table> 
    <tr> 
     <form action="." method="post"> 
     <td>{{ email }}<input type="hidden" name="email" value="{{ email }}" /></td> 
     <td><input type="submit" name="action" value="Edit" /></td> 
     <td><input type="submit" name="action" value="Delete" /></td> 
     </form> 
    </tr> 
</table> 
{% endfor %} 
+0

+1不錯的答案。他的代碼的編輯部分未顯示,但它可能會更新電子郵件值。即使是這種情況,您的建議仍然適用於刪除。 – DTing 2011-05-04 04:15:41

+0

嗨布蘭登,謝謝你的迴應。我完全同意你的意見。我剛剛開始使用Django並試圖找出一些基本知識。毫無疑問,我以奇怪和非實際的方式做事。話雖如此,我仍然對完成這個頁面感興趣。我將如何引用變量表單名稱?謝謝。 – David542 2011-05-04 04:19:28

+0

謝謝DTing。我肯定會把這個刪除分兩步進行。大衛,正如DTing所指出的那樣,如果您在列表中的表單發帖中還有一些額外的操作,您*可能*仍然需要一個表單......這完全取決於您要完成的任務。發佈您的編輯視圖可能會幫助我們爲您提供更好的答案。 – Brandon 2011-05-04 04:21:50