#python #django #if-statement #django-templates
#python #django #оператор if #django-шаблоны
Вопрос:
Я делаю проект энциклопедии, и на домашней странице есть поле поиска, в котором пользователь может ввести заголовок записи для выполнения поиска. Если есть полное совпадение, то загрузится страница ввода. Если есть частичное совпадение, это приведет к странице поиска, на которой будут перечислены некоторые предложения ввода с похожими названиями. Если совпадения нет или поиск был выполнен без запроса, я хочу, чтобы на странице поиска отображалось сообщение, сообщающее пользователю, что записи не найдены. У меня не выполнены первые 2 условия, и они работают нормально, но я изо всех сил пытаюсь заставить страницу отображать ошибку при отсутствии найденных записей.
views.py
def search(request):
value = request.GET.get('q','')
if(util.get_entry(value) is not None):
return HttpResponseRedirect(reverse("entry", kwargs={'entry': value }))
else:
subStringEntries = []
for entry in util.list_entries():
if value.upper() in entry.upper():
subStringEntries.append(entry)
return render(request, "encyclopedia/search.html", {
"entries": subStringEntries,
"search": True,
"value": value
})
search.html
{% extends "encyclopedia/layout.html" %}
{% block title %}
Encyclopedia
{% endblock %}
{% block body %}
{% if search %}
<h1>Searching for "{{ value }}"</h1>
<h2>Did you mean...</h2>
<ul>
{% for entry in entries %}
<li><a href="{% url 'entry' entry %}">{{ entry }}</a></li>
{% endfor %}
</ul>
{% else %}
No search results for this query
{% endif %}
{% endblock %}
Ответ №1:
Вы можете использовать {% empty %}
{% for entry in entries %}
<li><a href="{% url 'entry' entry %}">{{ entry }}</a></li>
{% empty %}
No entries found
{% endfor %}
Комментарии:
1. Недопустимый тег блока в строке 18: «пустой», ожидаемый «elif», «else» или «endif». Вы забыли зарегистрировать или загрузить этот тег?
2. Какую версию Django вы используете? Это правильный ответ, по крайней мере, для текущих версий. docs.djangoproject.com/en/3.0/ref/templates/builtins/#for-empty
3. Забудьте о версиях — это было еще в версиях 1.x. Если он не работает, у вас возникают более серьезные проблемы — это встроенный тег!