#python #django #search
Вопрос:
У меня есть строка поиска, которая отображает список элементов, которые пользователь должен найти. Я хотел бы передать входное значение для вывода html, поэтому, если пользователь ищет статью 1, я хочу отобразить над списком имя запроса. Я пытался задать запрос, поиск, но это не работает.
views.py
def search_qa_results(request): query = request.GET.get('q') qa_list = QA.objects.filter(title__icontains=query) if query is not None: lookups = Q(title__icontains=query) qa_list = QA.objects.filter(lookups) context = { 'qa_list': qa_list } return render(request, 'search/search_qa.html', context)
index.html
lt;form action="{% url 'search_qa_results' %}" method="get" id="search"gt; {% csrf_token %} lt;div class="searchbar" id="autocomplete"gt; lt;input name="q" type="text" placeholder="Type your question" class="search_input"gt; lt;a href="{% url 'search_qa_results' %}" class="search_icon"gt;lt;i class="fas fa-search"gt;lt;/igt;lt;/agt; lt;ul class="autocomplete-result-list"gt;lt;/ulgt; lt;/divgt; lt;/formgt;
search_results.html
{% extends 'base.html' %} lt;titlegt;{% block title %}Qamp;A results{% endblock %}lt;/titlegt; {% block content %} lt;link rel="stylesheet" type="text/css" href="/static/search_qa.css"gt; lt;div class="d-flex justify-content-start"gt; Search results for my question: {{WHAT TO PUT HERE?}}lt;/divgt; lt;div class="container h-100 pb-4"gt; lt;div class="d-flex justify-content-end h-100 pb-4"gt; {% for qa in qa_list %} lt;div class="card text-dark bg-light mb-3 text-left"gt; lt;a href="{{ qa.get_absolute_url }}"gt; lt;h5 class="card-header"gt;Q: {{qa.title}}lt;/h5gt; lt;div class="card-body"gt; lt;div class="card-title text-justify"gt;A: {{ qa.answer }}lt;/divgt; lt;/divgt; lt;div class="card-footer"gt; lt;small class="text-muted"gt;Published: {{qa.publish}}lt;/smallgt; lt;/divgt; lt;/agt; lt;/divgt; {% empty %} lt;pgt;No resultslt;/pgt; {% endfor %} lt;/divgt;
Комментарии:
1. Не могли бы вы поделиться своими моделями? Похоже, с вашими запросами что-то не так.
Ответ №1:
Если вы хотите отобразить только имя запроса, вам просто нужно добавить его в контекст :
views.py
def search_qa_results(request): context = {} query = request.GET.get('q', None) if query: lookups = Q(title__icontains=query) qa_list = QA.objects.filter(lookups) context = { 'qa_list': qa_list, 'query_name': query } else: # Return all the objects as default if query name is empty context = { 'qa_list': QA.objects.all() } return render(request, 'search/search_qa.html', context)
search_qa.html
{% if query_name %} lt;div class="d-flex justify-content-start"gt; Search results for {{ query_name }}lt;/divgt; {% else %} lt;div class="d-flex justify-content-start"gt; Please enter something in the search barlt;/divgt; {% endif %}