首页 > 解决方案 > 将搜索到的查询传递到另一个视图

问题描述

我正在构建一个小而简单的问答网络应用程序,并且我正在尝试实现一个搜索页面。

当我搜索问题标题时,搜索字段下方的结果显示良好。

但我试图在另一个页面上显示搜索标签的答案。

模型.py

class Questions(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=30,default='')
    tags = TaggableManager()

class Answers(models.Model):
    quest = models.ForeignKey(Questions,on_delete=models.CASCADE)

视图.py

def search(request):
    query = request.GET.get('q')

    if query:
        objs = Questions.objects.filter(tags__name__icontains=query)

    context = {'objs': objs}

    return render(request, 'search.html', context)

搜索.html

            {% for qas in objs %}
            {{ qas.title }}
            {% endfor %}

            {% for ans in answer %}
            {{ ans.ans }}
            {% endfor %}

此视图在单页中显示答案(在搜索页面中)。

我会感谢你的帮助。先感谢您

标签: pythondjangodjango-modelsdjango-views

解决方案


首先,您需要将查询添加到search视图的上下文以链接相应的答案:

def search(request):
    ...
    context = {'objs': objs,'query':query}

    return render(request, 'search.html', context)

然后您可以创建search_answer视图,将查询作为参数传递并Answer根据该查询过滤模型:

def search_answer(request, query):
    if query:
        answers = Answers.objects.filter(quest__tags__name__icontains=query)
        
    context = {'answers': answers}
    return render(request, 'search_answer.html', context)

更新 urls 文件以传递查询:

urlpatterns = [
    path('answers/<query>', search_answer, name='search-answer'),
]

search.html您可以链接到答案页面,如下所示:

<form  action="{% url 'search' %}" method="get">
  <input name="q" type="text">

            {% for qas in objs %}
                {{ qas.title }}
            {% endfor %}

            <a href="{% url 'search-answer' query=query %}">See answers</a>
</form>

最后search_answer.html,您可以通过以下方式显示答案:

{% for answer in answers %}
    Question: {{ answer.quest.title }}
    Answer: {{ answer.body }}
{% endfor %}

推荐阅读