Передача искомого запроса в другое представление

Я создаю небольшое и простое веб-приложение для вопросов и ответов и пытаюсь реализовать страницу поиска.

  • Я успешно создал страницу поиска.

Когда я ищу название вопроса, результаты отображаются ниже поля поиска.

НО я пытаюсь показать ответы искомого тега на другой странице. Я пытаюсь поместить ссылку под всеми результатами, чтобы показать ответы на искомый запрос, но все еще не могу сделать это.

models.py

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

class Answer(models.Model):
    answer_user = models.ForeignKey(User,on_delete=models.CASCADE)
    quest = models.ForeignKey(Question,on_delete=models.CASCADE)
    body = models.CharField(max_length=30)

views.py

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

    answer = ''
    objs = ''

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

        answer = Answer.objects.filter(quest__tags__name__icontains=query)

    context = {'objs': objs,'answer':answer}

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

search.html

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

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

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

Этот вид показывает ответы на одной странице (На искомых страницах).

Я думал о создании нового представления, которое будет связано с представлением поиска и будет передавать искомый запрос. Я не знаю, как я могу передать искомый запрос другому представлению.

Я буду признателен за вашу помощь. Заранее благодарю

Прежде всего, вам нужно добавить запрос в контекст представления 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 %}
Вернуться на верх