Операторы If и else в шаблоне Django

#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. Если он не работает, у вас возникают более серьезные проблемы — это встроенный тег!