Вот код этого контроллера в views.py
# python 3.5, django 1.9
from django.utils import timezone
from creation.models import Game
from django.views.generic.list import ListView
class GameList(ListView):
template_name = "gamelist.html"
queryset = Game.objects.order_by("-end")
paginate_by = 20
def get_context_data(self, **kwargs):
context = super(GameList, self).get_context_data(**kwargs)
context["User"] = self.request.user
context["next"] = []
context["now"] = []
context["time"] = timezone.now()
for i in self.queryset:
if i.start > timezone.now():
context["next"].append(i)
elif i.end > timezone.now():
context["now"].append(i)
else: break
context["next"].reverse()
return context
Собственно он делит все игры на следующие, текущие, которые на странице выводятся соответственно из массивов, а прошедшие игры из object_list сравнив game.end < time т.к. в нём все игры. Игр будущих и текущих будет всегда мало, поэтому в пагинации больше нуждаются прошедшие игры.
{% if next %}
<p class="next"></i> Ближайшие игры:</p>
{% for game in next %}
<a href="{% url "infogame" code=game.code %}"> {{ game.name }} (начало: {{ game.start }})</a><br />
{% endfor %}
{% endif %}
{% if now %}
<p class="now">Текущие игры:</p>
{% for game in now %}
<a href="{% url "infogame" code=game.code %}">> {{ game.name }} (до: {{ game.start }})</a><br />
{% endfor %}
{% endif %}
<p class="games">Все прошедшие игры:</p>
{% for game in object_list %}
{% if game.end < time %} <!-- игра завершена -->
<a href="{% url "infocart" code=game.code %}">> {{ game.name }} ({{ game.start }} - {{ game.end }})</a><br />
{% endif %}
{% endfor %}
Всё выводится правильно, но если изменить время начала и конца у игры, так чтобы она перебралась в другую категорию, он не выводится совсем. Перезапустив сервер всё становится так, как должно быть.