Список в пет разрастался, страница тяжелела, и я снова хотел «вручную порезать список». Но затем узнал, что в Django это встроено — база отдаёт не всё, а лишь кусок. Код получился совсем не страшным, хотя раньше боялся слов пагинация и «ограничение по страницам».

Нейтрально: Paginator делит queryset на страницы: отдаём запрашиваемую и не тянем всю таблицу. Пагинация — вещь базовая, а не «фича сеньора».

from django.core.paginator import Paginator

def habit_list(request):
    qs = Habit.objects.order_by("-created")
    page = Paginator(qs, 20).get_page(request.GET.get("page"))
    return render(request, "habits/list.html", {"page": page})

Облегчение и довольство — технически просто, а психологически «список». Чем больше таких осознаний, тем меньше пугают списки данных и требования «покажи, что умеешь отдавать порциями».