Django -当点击按钮时,我想改变字典的内容

cbjzeqam  于 2022-12-05  发布在  Go
关注(0)|答案(3)|浏览(166)

在我的html页面上,我有一个按钮和一个显示的数字。我希望每按一次按钮,数字就增加1。这是我目前为止的代码,但对一些人来说,它不起作用。
mypage.html

<form method='get' action='#'>
    <input type="submit" value="add" name="add"/>
</form>
<h1>{{ p }}</h1>

views.py

p = 1
def mypage(request):
    global p
    my_dictionary = {
        "p" : p,
    }
    if request.GET.get('add'):
        p = p+1
        my_dictionary = {
            "p" : p,
        }
    return render(request, "mypage.html", my_dictionary)
mmvthczy

mmvthczy1#

在每次请求时,都会运行一个新的python脚本示例,这会导致全局变量不被保留。您应该将计数存储在数据库中,并在每次请求时调用该值。除了数据库之外,还有其他选项,但需要某种持久存储的基本思想仍然存在。
或者,您可以让要求者追踪计数,并在要求中提供目前的计数。然后,您会将要求中提供的值加1。这将需要前端的一些额外程式码来维护计数,即使如此,如果使用者关闭浏览器,计数也会重设。
正如dm03514所指出的,你也可以这样使用会话:

if 'p' in request.session:    
   request.session['p'] = request.session['p'] + 1
else:
   request.session['p'] = 1
tez616oj

tez616oj2#

需要在请求之间跟踪p值。
两种可能性是

  • 每次请求时重新发送数据
  • 将数据存储在会话中,只发出递增/递减请求

该变量应该在所有用户之间共享?还是只在当前用户之间共享?

5vf7fwbs

5vf7fwbs3#

如果只有一个django示例在运行,它应该可以工作(虽然这不是像其他人建议的那样推荐的方法)。它似乎不工作是因为您使用了action='#',当您的URL已经以#结尾时,浏览器拒绝重新提交表单。相反,您可以使用以下模板:

<form method='get' action='.'>
    <input type="submit" value="add" name="add"/>
</form>
<h1>{{ p }}</h1>

相关问题