如何在 while 循环中打印 HttpResponse 然后在每个循环中附加到它?
How to print a HttpResponse in a while loop and then append onto it for each loop?
好的,我有这样的看法:
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 循环。
一个视图应该 return 一个 HTTPResponse
。将多个 HttpResponse
个对象加在一起没有意义。
您可以连接字符串和 return 单个 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))
仅查看一次 returns 一个回复。你想要的将需要 ajax 轮询(简单但效率不高)或 websockets(更复杂 - 查看 django-channels 了解如何在 Django 中使用 - 但对于你的应用程序类型可能更有效)。
好的,我有这样的看法:
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 循环。
一个视图应该 return 一个 HTTPResponse
。将多个 HttpResponse
个对象加在一起没有意义。
您可以连接字符串和 return 单个 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))
仅查看一次 returns 一个回复。你想要的将需要 ajax 轮询(简单但效率不高)或 websockets(更复杂 - 查看 django-channels 了解如何在 Django 中使用 - 但对于你的应用程序类型可能更有效)。