Как сохранить данные html-формы после отправки с помощью django?

Я создал форму в 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 с вашим контекстом, это намного понятнее.

Вернуться на верх