Python 在Django上显示空GET表单而不引发任何错误
我试图在我的项目中设置一个显示搜索表单的主页(使用GET方法)。 问题是,由于默认的请求方法是GET,所以在我加载该页面时,它会引发一个错误。当然,我可以将表单的方法更改为POST,但这不是正确的方法,因此我想知道是否可以设置任何条件来避免此问题,并且仍然能够检查任何错误 我正在开发Django 1.5和Python2.7 如果窗体类:Python 在Django上显示空GET表单而不引发任何错误,python,django,django-forms,Python,Django,Django Forms,我试图在我的项目中设置一个显示搜索表单的主页(使用GET方法)。 问题是,由于默认的请求方法是GET,所以在我加载该页面时,它会引发一个错误。当然,我可以将表单的方法更改为POST,但这不是正确的方法,因此我想知道是否可以设置任何条件来避免此问题,并且仍然能够检查任何错误 我正在开发Django 1.5和Python2.7 如果窗体类: class Search(forms.Form): middleschool = 'MS' highschool = 'HS' univ
class Search(forms.Form):
middleschool = 'MS'
highschool = 'HS'
university = 'U'
blank = '-'
school_choices = ((middleschool, 'Middle School'),
(highschool, 'High school'),
(university, 'University'),
(blank, 'Not defined'),)
title = forms.CharField(label='Keyworld')
subject = forms.ModelChoiceField(queryset=Subject.objects.order_by('?'),
required=False, label='Whitch subject you want to search?')
school = forms.ChoiceField(choices = school_choices, required=False,
label='What level of material are you searching?')
price = forms.BooleanField(required=False)
这是相对视图:
def home(request):
if request.method == 'GET':
form = Search(request.GET)
if form.is_valid():
cd = form.cleaned_data
ftitle = cd['title']
fsubject = cd['subject']
fschool = cd['school']
fprice = cd['price']
if fprice:
forms = File.objects.filter(name__contains='ftitle', subject='fsubject', school='fschool', price = '0,0')
return render(request, 'search.html', {'form': form})
else:
forms = File.objects.filter(name__contains='ftitle', subject='fsubject', school='fschool')
return render(request, 'search.html', {'form': form})
else:
form = Search()
return render(request, 'home.html', {'form': form})
这是HTML:
{% block content %}
<hr>
<div id='search'>
{% if form.errors %}
<p style="color: red;">
Please correct the error{{ form.errors|pluralize }} below.
</p>
{% endif %}
<form action="/search/" method="get">
<div class="field">{{ form.title.errors }}<label for="keyworld">Keyworld:</label>{{ form.title }}</div>
<div class="field"><label for="subject">Subject:</label>{{ form.subject }}</div>
<div class="field"><label for="school">Level:</label>{{ form.school }}</div>
<div class="field"><label for="price">Price yes or no:</label>{{ form.price }}</div>
<input type="submit" value="Search">
<input type="reset" value="Reset">
</form>
</div>
<hr>
{% endblock %}
{%block content%}
{%if form.errors%}
请更正下面的错误{form.errors | pluralize}}。
{%endif%}
{{form.title.errors}}Keyworld:{{form.title}}
主题:{form.Subject}
级别:{form.school}
价格是或否:{form.Price}
{%endblock%}
您可以检查request.GET是否为空,而不是检查request方法:
if request.GET:
form = SearchForm(request.GET)
您只需添加
或无,如下所示:
form = SearchForm(request.GET or None)
它引发了有关需要form.title的错误。