Django - 单击按钮时我想更改字典内容

时间:2015-08-10 22:04:39

标签: python html django button dictionary

在我的html页面上,我有一个按钮,并显示一个数字。我想每次按下按钮时数字增加1。这是我到目前为止的代码,但对于某些代码它不起作用。

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

# In the views.py file
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)

3 个答案:

答案 0 :(得分:2)

在每个请求上运行一个新的python脚本实例,这将导致您的全局变量不被保留。您应该将计数存储在数据库中,并在每个请求中调用该值。除了数据库之外还有其他选项,但仍然存在需要某种持久存储的基本思想。

或者,您可以让请求者跟踪计数并在请求中提供当前计数。然后,您将在请求中提供的值中添加一个。这将需要前端的一些额外代码来维持计数,即便如此,如果用户关闭浏览器,计数也将被重置。

正如dm03514指出的那样,你也可以使用这样的会话:

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

答案 1 :(得分:0)

p值需要跟踪请求。

有两种可能性

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

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

答案 2 :(得分:0)

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

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