Форма Джанго не появляется
Я работаю над созданием веб-страницы с помощью формы, используя класс Django Form. Я включил некоторые примеры кода, но моя проблема в том, что я следовал документации Django и учебнику в Djangobook, но не могу заставить мою форму отображаться на странице.
forms.py
from django import forms
class ResearchForm(forms.Form):
fam_choices = ...
spec_choices = ...
family = forms.ChoiceField(choices=fam_choices, required=True)
species = forms.ChoiceField(choices=spec_choices, required=True)
views.py
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.shortcuts import render
from mysite.forms import ResearchForm
...
def research(request):
if request.method == 'GET':
form = ResearchForm(request.GET)
if form.is_valid():
f = form.cleaned_data['family']
s = form.cleaned_data['species']
return render(request, 'thankyou.html', {})
else:
form = ResearchForm() # an unbound form
return render(request, "research.html", {'form':form})
research.html
...
<form action="/research/" method="get" name="researchform">
{{ form.as_p}}
<button>Submit</button>
</form>
...
На веб-странице отображается только кнопка, а не select
теги, которые ChoiceField
должен сделать.
РЕДАКТИРОВАТЬ:
Я отредактировал мой views.py
к этому:
def research(request):
form = ResearchForm(request.GET)
if form.is_valid():
return render(request, 'thankyou.html', {})
else:
form = ResearchForm()
return render(request, 'research.html', {'form':form})
РЕДАКТИРОВАТЬ 2:
urls.py
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('cms.urls')),
)
if settings.DEBUG:
urlpatterns = patterns('',
(r'^' + settings.MEDIA_URL.lstrip('/'), include('appmedia.urls')),
) + urlpatterns
2 ответа
При первом отображении страницы будет вызвано первое условие:
if request.method == 'GET':
и поскольку форма недействительна, она нигде не передается, поэтому form
переменная пуста.
Вместо GET
там должен быть POST
в обоих местах.
if request.method == 'POST':
form = ResearchForm(request.POST)
Не стоит проверять метод, а только валидность формы. Что-то вроде:
def research(request):
form = ResearchForm(request.GET)
if form.is_valid():
f = form.cleaned_data['family']
s = form.cleaned_data['species']
return render(request, 'thankyou.html', {})
else:
form = ResearchForm() # an unbound form
return render(request, "research.html", {'form':form})
Таким образом, если запрос GET содержит действительные данные формы, отображается страница благодарности, а если нет, то форма отображается.