Шаблон Django NT не отображается в раскрывающемся списке, и представление показывает ошибку - PullRequest
0 голосов
/ 03 марта 2010

Вы можете просмотреть полный исходный код здесь 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, значения пусты.

В представлениях я получаю 2 параметра, необходимые только 1, а проблема с urls.py равна 404.

1 Ответ

1 голос
/ 03 марта 2010

Вы смешиваете использование GET и POST запросов.Вы должны сделать следующее:

Либо использовать GET запросов, затем вы должны изменить свой шаблон следующим образом:

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

Имя должно быть частью URL, потому что вынастроил ваш urls.py таким образом.Я не рекомендую этот способ, так как каждый может просто ввести URL customer/foo/delete в адресную строку, чтобы удалить клиента foo.


Другой способ - использовать post.Поэтому вам необходимо изменить шаблон URL и представление:

(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()

Но, поскольку кажется, что вы можете удалить только одного клиента, создавать элемент ввода select не нужно, поскольку он содержит только одно значение.

Обновление :

Чтобы сделать это для всех клиентов, вы должны получить их все в своем представлении, например, в переменной 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, не отображаемый в выпадающем списке Я не знаю, что вы имеете в видуэто, может быть, вы можете уточнить, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...