Python 在Django上显示空GET表单而不引发任何错误

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

我试图在我的项目中设置一个显示搜索表单的主页(使用GET方法)。 问题是,由于默认的请求方法是GET,所以在我加载该页面时,它会引发一个错误。当然,我可以将表单的方法更改为POST,但这不是正确的方法,因此我想知道是否可以设置任何条件来避免此问题,并且仍然能够检查任何错误

我正在开发Django 1.5和Python2.7

如果窗体类:

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的错误。