如何使用django保存提交后的html表单数据



我在html中创建了一个表单,每次提交时都会将数据返回给Django。但是,当提交后重新加载页面时,在表单中输入的数据将丢失。为了解决这个问题,我从文档和这个博客中获得了灵感,然后我修改了我的views.py文件:

def search(request):
if request.method == 'POST':
search = request.POST['search']
form = MyForm(request.POST)
max_pages_to_scrap = 15
final_result = []
for page_num in range(1, max_pages_to_scrap+1):
url = "https://www.ask.com/web?q=" + search + "&qo=pagination&page=" + str(page_num)
res = requests.get(url)
soup = bs(res.text, 'lxml')
result_listings = soup.find_all('div', {'class': 'PartialSearchResults-item'})
for result in result_listings:
result_title = result.find(class_='PartialSearchResults-item-title').text
result_url = result.find('a').get('href')
result_desc = result.find(class_='PartialSearchResults-item-abstract').text

final_result.append((result_title, result_url, result_desc))
context = {'final_result': final_result}
form = MyForm()
return render(request, 'index.html', context,{'form':form})

我在models.py文件中写了以下代码:

from django import forms
from django.db import models 
# Create your models here.
class MyForm(forms.Form):
search = forms.CharField(max_length=500)

这是我的index.html文件的内容:

<form method="POST" action="search">
{% csrf_token %}
<input  type="search" name="search" placeholder="Search here..." value="{{form.search.value}}" autofocus x-webkit-speech/>

</form>

尽管我做了修改,但表单数据在提交后不会保留。

它无法保存,因为您正在将全新的表单传递到上下文:

...
form = MyForm()
return render(request, 'index.html', context,{'form':form})

只需将form = MyForm()移动到类似elif request.method == 'GET'::的位置

if request.method == 'POST':
...
form = MyForm(request.POST)
...
for page_num in range(1, max_pages_to_scrap+1):
...
elif request.method == 'GET':
form = MyForm()
context = {'final_result': final_result, 'form': form}
return render(request, 'index.html', context)

PS保持form与您的上下文,它会更清晰。

最新更新