Передача искомого запроса в другое представление
Я создаю небольшое и простое веб-приложение для вопросов и ответов и пытаюсь реализовать страницу поиска.
- Я успешно создал страницу поиска.
Когда я ищу название вопроса, результаты отображаются ниже поля поиска.
НО я пытаюсь показать ответы искомого тега на другой странице. Я пытаюсь поместить ссылку под всеми результатами, чтобы показать ответы на искомый запрос, но все еще не могу сделать это.
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 %}