Python Django表单:如何显示初始空白表单?

Python Django表单:如何显示初始空白表单?,python,django-forms,Python,Django Forms,我有这个查看功能: def search(request): if request.method == 'GET': form = SearchForm(request.GET) if form.is_valid(): last_name = form.cleaned_data['last_name'] first_name = form.cleaned_data['first_name']

我有这个查看功能:

def search(request):
    if request.method == 'GET':
        form = SearchForm(request.GET)
        if form.is_valid():
            last_name = form.cleaned_data['last_name']
            first_name = form.cleaned_data['first_name']
            lawyers = Lawyer.objects.all()
            [ other if statements ]
            ....
    else:
        form = SearchForm()
        return render_to_response('search.html', {'form': form})
我认为当页面加载时,
else
语句将使用初始空白表单执行。但事实并非如此。要使表单最初显示,我必须将其添加到第一个
if

def search(request):
    if request.method == 'GET':
        form = SearchForm(request.GET)
        if form.is_valid():
            last_name = form.cleaned_data['last_name']
            first_name = form.cleaned_data['first_name']
            lawyers = Lawyer.objects.all()
            [ other if statements ]
            ....
        form = SearchForm()
        return render_to_response('search.html', {'form': form})
    else:
        form = SearchForm()
        return render_to_response('search.html', {'form': form})
你能解释为什么第一个
if
从不为假吗?多谢各位

整个视图功能都是

每个正常的HTTP请求(如转到时)都是GET请求。当表单更改某些数据时,通常最好使用POST作为表单的方法

您应该阅读:

每个正常的HTTP请求(比如当您转到时)都是GET请求。当表单更改某些数据时,通常最好使用POST作为表单的方法


您应该阅读:

当您使用
method=GET
发布表单时,您实际上并没有更改初始请求中的方法:它也是
method=GET

您可以在表单中使用
method=POST
,您的if语句将对此进行检查,或者您可以根据表单的要求检查是否存在必需的字段,
first\u name
last\u name
,或者同时检查这两个字段

if 'first_name' in request.GET or 'last_name' in request.GET:
    form = SearchForm(request.GET)
else:
    form = SearchForm()

您可能希望将其抽象到表单本身,修改
\uuuu init\uuuu
方法,但您不必这样做。

当您使用
method=GET
发布表单时,实际上并没有从初始请求更改方法:它也是
method=GET

您可以在表单中使用
method=POST
,您的if语句将对此进行检查,或者您可以根据表单的要求检查是否存在必需的字段,
first\u name
last\u name
,或者同时检查这两个字段

if 'first_name' in request.GET or 'last_name' in request.GET:
    form = SearchForm(request.GET)
else:
    form = SearchForm()
您可能希望将其抽象为表单本身,修改
\uuuu init\uuuu
方法,但不必这样做