Django在视图函数中使用pk like int

时间:2016-12-13 01:07:46

标签: django django-templates django-views

我正在尝试制作异步多人游戏。 我的想法是在玩家之间共享模板(' play_game.html')。 因此,当玩家1转弯时,然后出现一个底部,当他按下它时,函数play_game获得一个请求和一个请求,这个,它在转弯处添加一个,所以,它呈现play_game .hmtl与下一轮比赛。问题: 游戏功能总是一个。如果我在浏览器中按F5但我没有按下底部,那么值仍为1。我不知道。

这是代码:

这是函数

@login_required
def play_game(request, flag):
    current_user = User.objects.get(user=request.user.id)
    game = current_user.game
    if int(flag) == 1:
        if game.turn < game.players_total:
            game.turn = game.turn + 1
        else:
            game.turn = 1
        game.save()
    turn = game.turn
    context = {
        'current_user' : current_user,
        'turn' : turn
    }
return render(request,'play_game.html', context) 

这是模板play_game.html

 {% extends 'base.html' %}
 {% load staticfiles %}

 {% block content %}
 {% if current_user.turn == turn %}
 <p> your turn <p/>
 <li><a href="{% url 'play_game' flag=1 %}"> Move </a></li>
 {% endif %}
 {% endblock %}

这是网址:

 url(r'^game_list/join_to_game/play_game/(?P<flag>[0-9]+)/$', views.play_game, name='play_game'),

另一方面,问题是标志总是一个。 我该怎么办?

由于

1 个答案:

答案 0 :(得分:1)

在这一行中出现问题,你总是将标志设置为1:

<a href="{% url 'play_game' flag=1 %}">

尝试将标志作为上下文变量传递给模板:

context = {
    'current_user' : current_user,
    'turn' : turn,
    'flag' : flag 
}

然后每次使用添加过滤器点击按钮时,内部模板会增加其值:

<li><a href="{% url 'play_game' flag=flag|add:'1' %}"> Move </a></li>