#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
блоке.