显示在下拉框和视图中的Django模板显示错误

时间:2010-03-03 10:25:25

标签: django

您可以在此处查看完整的源代码dpaste.com/hold/167199

错误:

delete() takes exactly 2 arguments (1 given)

从链接代码复制:

index.html
............................................
     <form method="POST" action="/customer/(?P<name>[a-z]*)/delete/">
     <div style="float: right; 
                 margin: 0px; padding: 05px; ">
     <label for="id_customer">Customer:</label>
     <select name="customer" id="id_customer">
     <option value="" selected="selected">---------</option>
     <option value="{{ customer.customer_name|escape }}"></option>
     </select>
     <input type="submit" value="delete">  
     </div>
     </form>
......................................
Urls.py

 (r'^customer/(?P<name>[a-z]*)/delete/', 'quote.excel.views.delete')

Views.py

def delete(request, name):
    if request.method == "POST": 
        Customer.objects.get(name=name).delete()
  

这就是我正在使用它的方式。首先,select应该将db中显示的值显示在下拉框中,但它是渲染dd框,值为空。

     

在视图中,我只需要1个给定的2个参数,而urls.py的问题是404。

1 个答案:

答案 0 :(得分:1)

您正在混合GETPOST请求的使用情况。您必须执行以下操作:

要么使用GET请求,那么您必须以这种方式更改模板:

<form method="GET" action="/customer/{{customer.customer_name}}/delete/">
   <input type="submit" value="delete">  
</form>

该名称必须是网址的一部分,因为您已经以这种方式设置了urls.py。我不建议这样做,因为每个人都可以在地址栏中输入网址customer/foo/delete来删除客户foo


另一种方式是使用帖子。因此,您必须更改您的网址格式和视图:

(r'^customer/delete/', 'quote.excel.views.delete')


def delete(request):
if request.method == "POST":
    name = request.POST.get('customer', False)
    if name:
        Customer.objects.get(name=name).delete()

但由于您似乎只能删除一个客户,因此无需创建选择输入元素,因为它只包含一个值。

<强>更新

要为所有客户制作此功能,您必须在视图中获取所有这些内容,例如在变量customers中并将其传递给模板。在模板中,您遍历所有这些:

<form method="POST" action="/customer/delete/">
  <label for="id_customer">Customer:</label>
  <select name="customer" id="id_customer">
      <option value="" selected="selected">---------</option>
      {% for customer in customers %}
          <option value="{{ customer.customer_name|escape }}">{{ customer.customer_name|escape }}</option>
      {% endfor %} 
  </select>
  <input type="submit" value="delete">  
</form>

至于部分 Django模板nt显示在下拉框中我不知道你的意思,也许你可以澄清你想要的东西。