代码之家  ›  专栏  ›  技术社区  ›  Cade

如何在while循环中打印HttpResponse,然后为每个循环附加到它上?

  •  0
  • Cade  · 技术社区  · 6 年前

    好吧,我有这样的观点:

    def fight(request):
        monster = Monster.objects.get(pk=request.POST['monster'])
        user = Profile.objects.get(pk=2)
        while monster.health > 0 and user.health > 0:
            monsterattack = random.randint(monster.minattack, monster.maxattack)
            userattack = random.randint(user.attack*.75, user.attack*1.5)
            user.health = user.health - monsterattack
            monster.health = monster.health - userattack
            HttpResponse('Player attacked for: %s\n Monster attacked for: %s\n' % (userattack, monsterattack))
        return HttpResponse('You are fighting %s\n Player Health: %s \n Monsters Health: %s' % (monster.name, user.health, monster.health))
    

    我想知道是否有一种方法可以让第一个HttpResponse在每次循环时打印到模板,然后在while循环完成后打印第二个while循环。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Alasdair    6 年前

    视图应返回单个 HTTPResponse . 添加多个 HttpResponse 对象放在一起。

    您可以串联字符串并返回单个res

    def fight(request):
        out = ""
        while monster.health > 0 and user.health > 0:
            out += 'Player attacked for: %s\n Monster attacked for: %s\n' % (userattack, monsterattack)
        out += 'You are fighting %s\n Player Health: %s \n Monsters Health: %s' % (monster.name, user.health, monster.health)
        return HttpResponse(out)
    

    另一种常见的模式是生成一个字符串列表,然后在末尾连接它们。这可能比串联字符串更快,但我不确定您在这种情况下是否会看到任何明显的区别:

    def fight(request):
        out = []
        while monster.health > 0 and user.health > 0:
            out.append('Player attacked for: %s\n Monster attacked for: %s' % (userattack, monsterattack))
        out.append('You are fighting %s\n Player Health: %s \n Monsters Health: %s' % (monster.name, user.health, monster.health)
        return HttpResponse("\n".join(out))
    
        2
  •  0
  •   bruno desthuilliers    6 年前

    视图仅返回一个响应。您需要的是ajax轮询(简单但效率不高)或websockets(更复杂-查看django频道了解django中的操作方法-但可能对您的应用程序更有效)。