Python Django:附加列表,然后分页

Python Django:附加列表,然后分页,python,django,pagination,Python,Django,Pagination,在我的网站上,我有一个供用户玩的公共游戏列表。我想给这个列表分页,这样它每页只显示20个游戏。同时,我想继续游戏统计,这样用户就可以知道他们是否玩过游戏,是否喜欢游戏(这样URL就可以改变)。目前它给我的网站带来了巨大的痛苦。我正在使用内置分页器 我的代码: def games(request): thisuser = request.user games_list = Game.objects.filter(private_game=False).order_by('-pubd

在我的网站上,我有一个供用户玩的公共游戏列表。我想给这个列表分页,这样它每页只显示20个游戏。同时,我想继续游戏统计,这样用户就可以知道他们是否玩过游戏,是否喜欢游戏(这样URL就可以改变)。目前它给我的网站带来了巨大的痛苦。我正在使用内置分页器

我的代码:

def games(request):
    thisuser = request.user
    games_list = Game.objects.filter(private_game=False).order_by('-pubdate')
    paginator = Paginator(games_list, 20)
    next = request.path
    page = request.GET.get('page')
    try:
        games = paginator.page(page)
    except PageNotAnInteger:
        games = paginator.page(1)
    except EmptyPage:
        games = paginator.page(paginator.num_pages)

    args = {'games': games}
    args.update(csrf(request))

    for game in games:
        played = (game, Result.objects.filter(player=thisuser, game=game).exists())
        liked = (game, Game.objects.filter(id=game.id, gamelikes=thisuser).exists())
        args['games'].append(played, liked)

return render(request, 'games.html', args)
错误是“'Page'对象没有属性'append'”

游戏模式:

class Game(models.Model):
    name            = models.CharField(max_length=200, null=True, blank=True)
    description     = models.TextField(null=True, blank=True)
    pubdate         = models.DateTimeField(default=timezone.now)
    createdby        = models.ForeignKey(User, related_name='game_creator')
    lastedit         = models.DateTimeField(default=timezone.now)
    private_game     = models.BooleanField(default=False)
    private          = models.ManyToManyField(User, related_name='private_game_players')
    item01           = models.CharField(max_length=200, null=True, blank=True)
    item01photocount = models.IntegerField(default=0)
    item02           = models.CharField(max_length=200, null=True, blank=True)
    item02photocount = models.IntegerField(default=0)
    item03           = models.CharField(max_length=200, null=True, blank=True)
    item03photocount = models.IntegerField(default=0)
    item04           = models.CharField(max_length=200, null=True, blank=True)
    item04photocount = models.IntegerField(default=0)
    value            = models.CharField(max_length=200, null=True, blank=True)
    endby_date       = models.DateField(null=True, blank=True)
    game_closed      = models.BooleanField(default=False)
    location         = models.CharField(max_length=200, null=True, blank=True)
    gamelikes        = models.ManyToManyField(User, related_name='game_likes')
    photocount       = models.IntegerField(default=0)

通过将属性直接粘贴到对象上,可以简化代码

# ...
for game in games:
    game.played = Result.objects.filter(player=thisuser, game=game).exists()
    game.liked = Game.objects.filter(id=game.id, gamelikes=thisuser).exists()

ctx = {'games': games}
ctx.update(csrf(request))

return render(request, 'games.html', ctx)
迭代模板中的
游戏
对象时,可以访问以下属性:

{% for game in games %}
{{ game.played }}, {{ game.liked }}
{% endfor %}
唯一需要注意的是确保不要覆盖
game
对象上可能存在的属性,例如,通过将属性前缀为
extra\u玩过的
extra\u喜欢的

来使用
append()
方法来指定
args['games]的值
必须是一个
列表
。你的
游戏
模型是什么样子的?