Проверить, является ли переданный контекст Пустым в шаблоне
Я пытаюсь добиться того, что если контекст пуст или если переменная STUDENT пуста, вместо того, чтобы вернуть всех студентов. он должен вернуть ни одного и в шаблоне показать No results found. В настоящее время, когда в q ничего не хранится, мой шаблон выводит всех студентов.
в просмотрах.
def student_home(request):
q = request.GET.get('q') if request.GET.get('q') != None else ""
students = Student.objects.filter(Q(first_name__icontains=q) | Q(last_name__icontains = q) |
Q(grade__icontains=q))
context = {'students': students}
return render(request, 'StudentManager/home.html', context)
поисковая панель в NAVBAR.
<form class="d-flex" role="search" action='{% url 'student_home' %}'>
<input class="form-control me-2" type="search" name='q' placeholder="Search Student"
aria-label="Search">
<button type="submit" class="btn" style="background: #fff2df;">Search</button>
</form>
Ваши вопросы сбивают с толку: в вашем коде не существует переменной STUDENT.
вы можете просто проверить переменную students в вашем шаблоне:
{% if not students %}
No results found
{% endif %}
Вы получаете всех студентов с q = ""
, потому что Student.objects.filter(first_name__icontains="")
означает для django возврат всех Student
, где first_name
не None
.
Попробуйте это
def student_home(request):
q = request.GET.get('q', None)
if q:
students = Student.objects.filter(Q(first_name__icontains=q) | Q(last_name__icontains = q) | Q(grade__icontains=q))
else:
students = []
context = {'students': students}
return render(request, 'StudentManager/home.html', context)