【问题标题】:Django - When button is clicked I want to change the dictionary contentDjango - 单击按钮时我想更改字典内容
【发布时间】:2015-08-10 22:04:38
【问题描述】:

在我的 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)

【问题讨论】:

  • 恐怕变量,甚至是全局变量,都不会从一个视图调用到下一个视图调用。通常使用数据库来使此类数据持久化(或文件,或 ....)
  • 听起来更像是 AngularJS 这样的前端库的任务。 codecademy.com 有一门 AngularJS 课程可以完成该任务。在 AngularJS 让用户将值增加到您想要的任何值之后,您就可以使用 Django 将结果保存到数据库中。

标签: python html django button dictionary


【解决方案1】:

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

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

正如 dm03514 所指出的,您也可以像这样使用会话:

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

【讨论】:

  • 每次单击添加按钮时都会 +1,因此它可以工作,但刷新页面时计数不会重置为 1。我该如何解决这个问题?
  • 一个简单的解决方案是创建一个新视图来清除会话变量“p”。在页面加载时,您只需调用视图。
【解决方案2】:

需要跨请求跟踪 p 值。

两种可能性

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

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

【讨论】:

  • 我希望该变量仅由当前用户共享,您能否进一步解释一下,我不知道该怎么做。谢谢。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多