Как применить if else, если ключевое слово, введенное в строке поиска, не существует в Django

#django

#django

Вопрос:

Я создал кнопку поиска в своем приложении для ведения блога, которая возвращает сообщения с похожим заголовком.

views.py имеет

 def search(request):
    query = request.GET.get('query')
    posts = Post.objects.filter(title__icontains=query).order_by('-date_posted')
    params = {'posts' : posts}
    return render(request, 'blog/search.html' , params)
 

base.html

 <form method="get" class="form-inline my-2my-lg-0 "  action="{% url 'search' %}">
                  <input class="form-control nav-item nav-link text-secondary" type="search" name="query" id="query" placeholder="Search" aria-label="Search">
                  <button class="btn btn-outline-success nav-item nav-link ml-1">Search</button>
</form>
 

и search.html

 {% for post in posts %} 
    <!-- starting loop (posts is keyword from view) -->
        <article class="media content-section">
            <img class="rounded-circle article-img" src="{{post.author.profile.image.url}}">
              <div class="media-body">
                <div class="article-metadata">
                  <a class="mr-2" href="{% url 'user-posts' post.author.username %}">{{ post.author }}</a>
                  <small class="text-muted">{{ post.date_posted | date:"F d, Y" }}</small>
                </div>
                <h2><a class="article-title" href="{% url 'post-detail' post.id%}">{{ post.title }}</a></h2>
                <p class="article-content">{{ post.content|slice:":200" }}</p>
                {% if post.content|length > 200 %}
                    <div class="btn-group-sm">
                        <a class="btn btn-outline-secondary" href="{% url 'post-detail' post.id%}">Read More amp;rarr;</a>
                    </div>
                {% endif %} 
              </div>
        </article>  
    {% endfor %} 
 

Теперь, если пользователь вводит ключевое слово, похожее на заголовок любого сообщения, эти сообщения возвращаются. Если заголовок сообщения не соответствует этому ключевому слову, возвращается черная страница. Вместо пустой страницы я хочу, чтобы в абзаце говорилось, что «ни одно сообщение не соответствует названию»

Редактировать

Как получить что-то вроде «ни одно сообщение не соответствует заголовку {{query}} » вместо «ни одно сообщение не соответствует заголовку», я получаю

Ответ №1:

Оберните свой шаблон следующим образом:

 {% if posts %}
    {% for post in posts %}
        ...
    {% endfor %}
{% else %}
    <h2> No post matches the title. </h2>
{% endif %}
 

Поскольку ваш набор запросов posts будет пустым, он отобразит оператор в else блоке.