Echo Foe
Echo Foe

Reputation: 498

How to redirect to another page with a search term?

I have a search engine that works great in home/views.py:

def home(request):
...
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
    form = SearchForm(request.GET)
    if form.is_valid():
        query = form.cleaned_data['query']
        results = products.annotate(
            similarity=TrigramSimilarity('name', query),
        ).filter(similarity__gt=0.15).distinct().order_by('-similarity')
        # return render(request, 'search/search_results.html', locals())
        return redirect(reverse('home:search_results'))
    else:
        form = SearchForm()
...
return render(request, 'home/home.html', context)

def search_results(request):
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
    form = SearchForm(request.GET)
    if form.is_valid():
        query = form.cleaned_data['query']
        results = products.annotate(
            similarity=TrigramSimilarity('name', query),
        ).filter(similarity__gt=0.15).distinct().order_by('-similarity')

        return render(request, 'search/search_results.html', locals())
    else:
        form = SearchForm()

return render(request, 'search/search_results.html', locals())

I also have in urls.py:

app_name = 'home'
urlpatterns = [
    path('', views.home, name='home'),
    path('search_results/<query>', views.search_results, name='search_results'),
]\
              + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \
              + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

How can I get a redirect to a page with url construction like this localhost/search_results/?query=['query']?

Upvotes: 0

Views: 689

Answers (2)

Echo Foe
Echo Foe

Reputation: 498

This problem was solved! I tried to apply a construction like this return redirect(f'/search_results/?query={query}').

I don't know if this is the most correct solution, but I get what I wanted in response localhost/search_results/?query=umbrella

I hope this helps someone, and if someone suggests a better solution, please write about it. Thank you all in advance!

def home(request):
form = SearchForm()
query = None
results = []
if 'query' in request.GET:
    form = SearchForm(request.GET)
    if form.is_valid():
        query = form.cleaned_data['query']
        results = products.annotate(
            similarity=TrigramSimilarity('name', query),
        ).filter(similarity__gt=0.15).distinct().order_by('-similarity')
        return redirect(f'/search_results/?query={query}')
    else:
        form = SearchForm()
return render(request, 'home/home.html', context)

Upvotes: 1

Try this:

return redirect_params(reverse('home:search_results'), {'query': 'query'})

Upvotes: 1

Related Questions