Невозможно добавить фильтр диапазонов Django в шаблон
Я пытаюсь заставить работать код слайдера диапазонов из https://hackernoon.com/django-tutorial-creating-a-range-slider-filter-tt28359e
Я дошел до создания представлений, моделей, шаблонов, добавляя некоторые данные в модель Peoples и отображая их. Код, который работает правильно, отображает данные из модели People в простой таблице. Однако я не могу заставить работать фильтр. Мне пришлось изменить некоторые имена в коде примера из-за конфликтов имен с уже существующими элементами в моем существующем приложении Django. Первый набор кода работает для отображения всех записей из модели People.
#views.py
from .models import People
from .filters import PeopleFilter
def Peopleindex(request): # display all the records from the People model/table
all_people = People.objects.all()
return render(request, 'pollapp2/Peopleindex.html', {'all_people':all_people})
Шаблон:
<table border='1' style="width:50%; text-align:center">
<thead>
<tr>
<th> Name </th>
<th> Surname </th>
<th> Age </th>
</tr>
</thead>
<tbody>
{% for person in all_people %}
<!-- for person in all_people -->
<!-- for person in people_filter.qs -->
<tr>
<td> {{ person.name }} </td>
<td> {{ person.surname }} </td>
<td> {{ person.age }} </td>
</tr>
{% endfor %}
</tbody>
</table>
Выше правильно отображены в таблице HTML все записи из модели Peoples.
Затем, когда я пытаюсь изменить код, чтобы заставить поля фильтра отображаться в шаблоне, я применяю следующие изменения:
#filters.py << это что-то новое
import django_filters
from .models import People
class PeopleFilter(django_filters.FilterSet):
age = django_filters.AllValuesFilter()
class Meta:
model = People
fields = ['age']
#views.py
def Peopleindex(request): # following two lines changed from “display” version
people_filter = RangeFilter(request.GET)
return render(request, 'pollapp2/Peopleindex.html', {'people_filter':people_filter})
шаблон: добавлена форма и изменен цикл for
<form method="get">
{{ people_filter.form.as_p }}
<input type="submit" />
</form>
<table border='1' style="width:50%; text-align:center">
<thead>
<tr>
<th> Name </th>
<th> Surname </th>
<th> Age </th>
</tr>
</thead>
<tbody>
{% for person in people_filter.qs %} << changed here
<!-- for person in all_people -->
<!-- for person in people_filter.qs -->
<tr>
<td> {{ person.name }} </td>
<td> {{ person.surname }} </td>
<td> {{ person.age }} </td>
</tr>
{% endfor %}
</tbody>
</table>
и я получаю следующие сообщения об ошибках (среди многих других), когда пытаюсь загрузить страницу/шаблон, http://localhost:8000/polls/Pidx
NameError at /polls/Pidx
…..
Exception value: name ”RangeFilter” is not defined
…
…. \polls\views.py ,line 23 in Peopleindex
people_filter = RangeFilter(request.GET)
….
В моей виртуальной среде для этого приложения pip freeze выдает:
asgiref==3.5.0
Django==3.2.12
django-crispy-forms==1.14.0
django-filter==21.1
django-widget-tweaks==1.4.12
pytz==2021.3
sqlparse==0.4.2
typing-extensions==4.0.1
Итак, я думаю, что у меня есть все необходимые модули.