#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 .