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
方法,但不必这样做