在django中引用多个提交按钮

Dav*_*542 16 django

我如何致电以下多个提交表格 -

<form action="/" method="post">
    {% csrf_token %}

    <input type="text" name="{{ email.id }}" value=" {{email}}"></td>
    <td><input type="submit" value="Edit"></td>
    <td><input type="submit" value="Delete"></td>
</tr>
</form>
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情 -

if value = edit:
    do this

if value = delete:
    do this
Run Code Online (Sandbox Code Playgroud)

我将如何在views.py文件中对此进行编码?

dr *_*bob 35

为输入类型指定名称并在request.POST字典中查找它们.

例如:

<form action="/" method="post">
    {% csrf_token %}

    <input type="text" name="{{ email.id }}" value=" {{email}}"></td>
    <td><input type="submit" value="Edit" name="_edit"></td>
    <td><input type="submit" value="Delete" name="_delete"></td>
</tr>
Run Code Online (Sandbox Code Playgroud)

并在views.py之类的东西

if request.POST:
    if '_edit' in request.POST:
         do_edit()
    elif '_delete' in request.POST:
         do_delete()
Run Code Online (Sandbox Code Playgroud)

编辑:改变d.has_key(k)k in d每丹尼尔的评论. has_key在python 3.0中已弃用,并且in样式是首选,因为它更通用 - d.has_key(k)如果d不是字典,则特别失败,但k in d适用于任何d可迭代的(例如,dict,string,tuple,list,set).

  • 自Python 2.4以来,`foo.has_key('bar')`在foo`中拼写为''bar'. (2认同)
  • 请记住,如果表单中有多个提交按钮,并且用户按下Enter键,则会自动单击HTML中的第一个按钮. (2认同)

Rac*_*ole 8

我知道很久以前就问过这个问题,但是这里的记录是使用基于类的视图的解决方案.它使用与jimbob博士的答案相同的html.

from django.views.generic.edit import FormView

class MyView(FormView):
    template_name = 'mytemplate.html'
    form_class = MyForm

    def form_valid(self, form):
        if '_delete' in self.request.POST:
            # do delete
        elif '_edit' in self.request.POST:
            # do edit
Run Code Online (Sandbox Code Playgroud)

请注意默认行为form_valid是:

return HttpResponseRedirect(self.get_success_url())
Run Code Online (Sandbox Code Playgroud)


Bra*_*don 5

您需要为提交按钮提供一个名称属性,例如“操作”,然后您可以在 request.POST 集合中引用它们:

def my_view(request):
    action = request.POST.get('action')
    if action == 'Edit':
        #do edit
    else:
        # do delete
Run Code Online (Sandbox Code Playgroud)

希望能帮到你。