【问题标题】:How to redirect to another page with a search term?如何使用搜索词重定向到另一个页面?
【发布时间】:2021-08-12 19:15:49
【问题描述】:

我有一个在 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())

我也有在 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)

如何使用 localhost/search_results/?query=['query'] 这样的 url 结构重定向到页面?

【问题讨论】:

    标签: django search django-views django-queryset django-urls


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • name 'redirect_params' is not defined...django 库中没有类似 redirect_params 的方法
    【解决方案2】:

    这个问题解决了!我尝试应用这样的构造 return redirect(f'/search_results/?query={query}')

    我不知道这是否是最正确的解决方案,但我得到了我想要的响应 localhost/search_results/?query=umbrella

    我希望这对某人有所帮助,如果有人提出更好的解决方案,请写下来。提前谢谢大家!

    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)
    

    【讨论】:

      猜你喜欢
      • 2016-08-05
      • 2018-04-27
      • 2015-03-12
      • 2011-02-22
      • 2011-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多