在django中引用变量表单ID

时间:2011-05-04 03:53:54

标签: django

我无法弄清楚如何在django中引用表单的(变量)名称。这是我目前的代码:

email_edit.html中的

{% 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.id }}文件中的views.py有哪些内容可以正确引用表单?

1 个答案:

答案 0 :(得分: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 %}

希望这是有道理的。

[后续答复] 鉴于您设置的代码,我会使每一行都是它自己的表单,并且电子邮件字段需要具有非动态名称。否则,在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 %}