Невозможно добавить фильтр диапазонов 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

Итак, я думаю, что у меня есть все необходимые модули.

Вернуться на верх