我正在开发django中的人类与人类象棋应用程序。典当促销的部分不起作用。会话值正在更改,但未更新为django模板。
推广视图
def promote(request):
#Update board with promoted piece
board = request.session['board']
target = request.session['promote_target']
board[target[0]][target[1]] = request.POST['piece']
request.session['board'] = board
request.session['promotion'] = False
request.session['player'] = 1
return render(request,'chess_app/Default.htm')
js调用服务器的函数
function promotion(piece){
//Function to promote pawns
//Add a confirm message
$.ajax({url:"{%url 'promote'%}",data:{'piece':piece},type:'post',success:function(){location.reload()}});
}
一切正常,但会话没有得到更新 如果你可以帮忙的话会很棒。
答案 0 :(得分:0)
选中此question我想它应该可以解决您的问题。 但是IMHO在模板中使用会话不是很好的解决方案,请检查这个替代选项:
您可以从会话中获取值并将其设置在中间件中的请求对象中。如果您计划在不同视图和不同模板中使用此值,则此选项是明智的。
您可以在视图上下文中放置值。如果您计划仅在一个视图中使用值,则此选项将很好。 (当然,您可以创建mixin以在不同视图之间共享此功能
如果您可以提取使用此数据的模板的一部分,您可以为此模板创建自定义标记,并从请求中获取所有必需的数据。
如果您需要在所有模板之间共享此值,则可以使用上下文处理器。
答案 1 :(得分:0)
我不确定为什么像一年前被问到后,为什么不将其发布在此线程中。
The session values are changing, but not getting updated to django template.
要解决此问题,您只需告诉Django会话已被修改,然后就知道可以在模板中对其进行更新:
# make Django update sessions in templates
request.session.modified = True
以下是文档:
https://docs.djangoproject.com/en/2.2/topics/http/sessions/#when-sessions-are-saved
因此,将其放在上下文中:
def promote(request):
#Update board with promoted piece
board = request.session['board']
target = request.session['promote_target']
board[target[0]][target[1]] = request.POST['piece']
request.session['board'] = board
request.session['promotion'] = False
request.session['player'] = 1
# make Django update sessions in templates
request.session.modified = True
return render(request,'chess_app/Default.htm') # you are good