如何在按钮单击时更新烧瓶应用程序中的一个元素?

时间:2018-04-19 20:37:01

标签: javascript python ajax flask jinja2

在我的app.py中,我有一个字符串列表,例如:

list = ['item 1', 'item 2', 'item 3']

我希望能够随机显示一个字符串,并在点击“刷新”按钮后将其显示在页面上,但每个项目只能显示一次。即。一旦项目全部以随机顺序显示,我就可以显示消息“已完成”。

我已经考虑刷新页面(如下所示),但这意味着这些项目可以一个接一个地出现,我可以随时保持刷新。这是我目前正在进行的工作代码,但我觉得它似乎与我想要的不相符。

items_list = ['A', 'B', 'C', 'D', 'E']


@app.route("/")
def index():
    return render_template("index.html")

@app.route("/items", methods=['GET', 'POST'])
def items():        
    item = random.choice(items_list)

    if request.method == "POST":
        return render_template("scales.html", item=item)

    else:
        return render_template("scales.html")

items.html:

<div>
    <p>{{ item }}</p>
    <form action="/items" method="post">
        <button onClick="window.location.reload();" type="button">Refresh</button>
    </form>
</div>

也许我可以用AJAX做到这一点?但我需要一个数据库吗? 或者类似app.jinja_env.globals.update()的内容 稍微有点遗憾,任何有关正确方向的建议或指示都将非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用Ajax或Websockets显示结果。然而,它也适用于&#34;正常&#34;你实现它的方式。

您应该将按钮声明为提交按钮以触发POST事件。这会将您转到items()端点。

<form action="/items" method="post">
    <button type="submit" type="button">Refresh</button>
</form>

确保每个项目只在您需要从列表中删除后才能显示。

@app.route("/items", methods=['GET', 'POST'])
def items():        
    item = random.choice(items_list)
    items_list.remove(item)

但是如果没有剩下任何物品,你还应该考虑该怎么做。