Django выдает ошибку при вызове метода запроса POST

#python #django #django-forms

#python #django #django-forms

Вопрос:

Итак, я использую Django версии 1.6.5 и пытаюсь создать простую форму. и у меня есть такое представление

    def create(request):
       if request.method == 'POST': # If the form has been submitted...
           form = WatchForm(request.POST) # A form bound to the POST data
           if form.is_valid(): # All validation rules pass
               return HttpResponseRedirect('Watch/index.html') # Redirect after POST
           else: 
            return render(request, 'Watch/create.html', {'form': form,})
        else:
            form = WatchForm() # An unbound form

       return render(request, 'Watch/create.html', {
       'form': form,
        })
 

и это моя форма

     from django import forms
    from Watch.models import Watch

    class WatchForm(forms.Form):
        idNumber=forms.CharField(max_length=30)
        brand = forms.CharField(max_length=200)
        #relisedDate =forms.DateTimeField('date published')
        referenceNumber = forms.CharField(max_length=30)
        sortDescription=forms.CharField(max_length=200)
        fullDescription=forms.CharField(max_length=600)
 

Я также создал шаблон с именем create.html

     <form action="" method="post">{% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Submit" />
    </form>
 

и это мой urlpatterns
url-адрес для ввода (r’^create $’,views.create),

Поэтому, когда я использую этот URL / watch / create /, форма появляется в моем браузере, но при отправке я получаю эту ошибку :

 Page not found (404)
Request Method: POST
Request URL:    http://127.0.0.1:8000/watch/create/

   Using the URLconf defined in miWatch.urls, Django tried these URL patterns, in this          order:
   ^watch/ ^$ [name='index']
   ^watch/ ^create$
   ^watch/ ^(?P<watch_id>[0-9] )/$ [name='detail']
   ^watch/ ^(?P<watch_id>[0-9] )/results/$ [name='results']
   ^watch/ ^(?P<watch_id>[0-9] )/vote/$ [name='vote']
   The current URL, watch/create/, didn't match any of these.
 

и это вывод монитора

      [23/Jun/2014 07:53:52] "GET /watch/create HTTP/1.1" 200 1084
     [23/Jun/2014 07:54:01] "POST /watch/create/ HTTP/1.1" 404 2766
     [23/Jun/2014 07:54:08] "GET /watch/create/ HTTP/1.1" 404 2765
 

Кто-нибудь может дать мне разъяснения о том, почему это происходит и чего мне не хватает??
Заранее спасибо!

Комментарии:

1. Страница ошибки (при DEBUG=True) должна отображать список URL-адресов, которые были опробованы. Не могли бы вы показать нам это, пожалуйста?

2. В связи с этим, пожалуйста, рассмотрите возможность использования reverse: docs.djangoproject.com/en/dev/topics/http/urls /…

Ответ №1:

Измените action атрибут в вашей форме как

 <form action="" method="post">
 

Это отправит форму на текущий URL.

Комментарии:

1. Я сделал, но все равно получаю ту же самую ошибку!

2. Нравится это? разве второй оператор else не обрабатывает метод GET?

3. @Nikolis. Py, вы обновили шаблон? покажите нам обновленный код

4. @Nikolis. Py, измените шаблон URL на has / , например url(r'^create/$',views.create),

Ответ №2:

Вам не хватает завершающей косой черты:

 Using the URLconf defined in miWatch.urls, Django tried these URL patterns, in this          order:
   ^watch/ ^$ [name='index']
   ^watch/ ^create$ #  <-- No Trailing Slash! 

   The current URL, watch/create/, didn't match any of these.
 

Измените свой URL-адрес, добавив косую черту:

 url(r'^create/

Причина, по которой вы видите отображение формы при получении URL, заключается в том, что вы не добавляете косую черту и загружаете страницу вручную. Django любит иметь завершающие косые черты - не боритесь с этим. Не уверен, почему при публикации в пустое действие добавляется косая черта, но это звучит как HTML, а не проблема Django.


Ответ №3:

Определен ли ваш параметр URL на корневом уровне? Если это так, вам нужно исправить путь к

 url(r'^watch/create


Комментарии:

1. нет, это не тот, который находится внутри каталога приложения.

Ответ №4:

Добавьте косую черту к своему URL-адресу

 url(r'^watch/create/

Верните вашу форму, повторно отображенную, когда она недействительна, с данными и сообщениями об ошибках.

 from django.shortcuts import render

def create(request):
    # POST
    if request.method == 'POST': # If the form has been submitted...
        form = WatchForm(request.POST) # A form bound to the POST data
    if form.is_valid(): # All validation rules pass
        # Process the data in form.cleaned_data
        # ...
        return HttpResponseRedirect('Watch/index.html') # Redirect after POST
    else:
        # Not valid, re-render form with data and error messages
        return render(request, 'Watch/create.html', {'form': form,})

    return render(request, 'Watch/create.html', {
      'form': form,
    })
 

Исправьте действие в вашем шаблоне формы:

 <form action="." method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit" />
</form>
 

Комментарии:

1. Я попробовал то, что вы предложили, но, похоже, это не решает мою проблему. Когда дело доходит до файла url conf, это файл url conf, который находится в конкретном приложении, а не в каталоге mySite, поэтому я не могу добавить watch / create, потому что это будет выглядеть так watch / watch / create .

,views.create),
Причина, по которой вы видите отображение формы при получении URL, заключается в том, что вы не добавляете косую черту и загружаете страницу вручную. Django любит иметь завершающие косые черты - не боритесь с этим. Не уверен, почему при публикации в пустое действие добавляется косая черта, но это звучит как HTML, а не проблема Django.

Ответ №3:

Определен ли ваш параметр URL на корневом уровне? Если это так, вам нужно исправить путь к


Комментарии:

1. нет, это не тот, который находится внутри каталога приложения.

Ответ №4:

Добавьте косую черту к своему URL-адресу


Верните вашу форму, повторно отображенную, когда она недействительна, с данными и сообщениями об ошибках.


Исправьте действие в вашем шаблоне формы:


Комментарии:

1. Я попробовал то, что вы предложили, но, похоже, это не решает мою проблему. Когда дело доходит до файла url conf, это файл url conf, который находится в конкретном приложении, а не в каталоге mySite, поэтому я не могу добавить watch / create, потому что это будет выглядеть так watch / watch / create .

,views.create)

Комментарии:

1. нет, это не тот, который находится внутри каталога приложения.

Ответ №4:

Добавьте косую черту к своему URL-адресу


Верните вашу форму, повторно отображенную, когда она недействительна, с данными и сообщениями об ошибках.


Исправьте действие в вашем шаблоне формы:


Комментарии:

1. Я попробовал то, что вы предложили, но, похоже, это не решает мою проблему. Когда дело доходит до файла url conf, это файл url conf, который находится в конкретном приложении, а не в каталоге mySite, поэтому я не могу добавить watch / create, потому что это будет выглядеть так watch / watch / create .

,views.create),

Причина, по которой вы видите отображение формы при получении URL, заключается в том, что вы не добавляете косую черту и загружаете страницу вручную. Django любит иметь завершающие косые черты — не боритесь с этим. Не уверен, почему при публикации в пустое действие добавляется косая черта, но это звучит как HTML, а не проблема Django.

Ответ №3:

Определен ли ваш параметр URL на корневом уровне? Если это так, вам нужно исправить путь к


Комментарии:

1. нет, это не тот, который находится внутри каталога приложения.

Ответ №4:

Добавьте косую черту к своему URL-адресу


Верните вашу форму, повторно отображенную, когда она недействительна, с данными и сообщениями об ошибках.


Исправьте действие в вашем шаблоне формы:


Комментарии:

1. Я попробовал то, что вы предложили, но, похоже, это не решает мою проблему. Когда дело доходит до файла url conf, это файл url conf, который находится в конкретном приложении, а не в каталоге mySite, поэтому я не могу добавить watch / create, потому что это будет выглядеть так watch / watch / create .

, views.create)

Верните вашу форму, повторно отображенную, когда она недействительна, с данными и сообщениями об ошибках.


Исправьте действие в вашем шаблоне формы:


Комментарии:

1. Я попробовал то, что вы предложили, но, похоже, это не решает мою проблему. Когда дело доходит до файла url conf, это файл url conf, который находится в конкретном приложении, а не в каталоге mySite, поэтому я не могу добавить watch / create, потому что это будет выглядеть так watch / watch / create .

,views.create),

Причина, по которой вы видите отображение формы при получении URL, заключается в том, что вы не добавляете косую черту и загружаете страницу вручную. Django любит иметь завершающие косые черты — не боритесь с этим. Не уверен, почему при публикации в пустое действие добавляется косая черта, но это звучит как HTML, а не проблема Django.

Ответ №3:

Определен ли ваш параметр URL на корневом уровне? Если это так, вам нужно исправить путь к


Комментарии:

1. нет, это не тот, который находится внутри каталога приложения.

Ответ №4:

Добавьте косую черту к своему URL-адресу


Верните вашу форму, повторно отображенную, когда она недействительна, с данными и сообщениями об ошибках.


Исправьте действие в вашем шаблоне формы:


Комментарии:

1. Я попробовал то, что вы предложили, но, похоже, это не решает мою проблему. Когда дело доходит до файла url conf, это файл url conf, который находится в конкретном приложении, а не в каталоге mySite, поэтому я не могу добавить watch / create, потому что это будет выглядеть так watch / watch / create .

,views.create)

Комментарии:

1. нет, это не тот, который находится внутри каталога приложения.

Ответ №4:

Добавьте косую черту к своему URL-адресу


Верните вашу форму, повторно отображенную, когда она недействительна, с данными и сообщениями об ошибках.


Исправьте действие в вашем шаблоне формы:


Комментарии:

1. Я попробовал то, что вы предложили, но, похоже, это не решает мою проблему. Когда дело доходит до файла url conf, это файл url conf, который находится в конкретном приложении, а не в каталоге mySite, поэтому я не могу добавить watch / create, потому что это будет выглядеть так watch / watch / create .

,views.create),Причина, по которой вы видите отображение формы при получении URL, заключается в том, что вы не добавляете косую черту и загружаете страницу вручную. Django любит иметь завершающие косые черты — не боритесь с этим. Не уверен, почему при публикации в пустое действие добавляется косая черта, но это звучит как HTML, а не проблема Django.

Ответ №3:

Определен ли ваш параметр URL на корневом уровне? Если это так, вам нужно исправить путь к


Комментарии:

1. нет, это не тот, который находится внутри каталога приложения.

Ответ №4:

Добавьте косую черту к своему URL-адресу


Верните вашу форму, повторно отображенную, когда она недействительна, с данными и сообщениями об ошибках.


Исправьте действие в вашем шаблоне формы:


Комментарии:

1. Я попробовал то, что вы предложили, но, похоже, это не решает мою проблему. Когда дело доходит до файла url conf, это файл url conf, который находится в конкретном приложении, а не в каталоге mySite, поэтому я не могу добавить watch / create, потому что это будет выглядеть так watch / watch / create .