使用未知数量的按钮

时间:2019-04-17 22:12:52

标签: python flask jinja2

如果我在一页上有很多按钮,那么当按下特定按钮时如何查找?

在我的示例中,我使用长度可变的for循环在系统中打印出订单。每个订单都有2个按钮:“删除订单”(删除订单)和“更新订单”(将订单状态从“未完成”更改为“准备取货”)。

我怎么知道何时按下这些按钮中的特定按钮。如我在其他解决方案中所见,使用if elseif elseif等是不可行的。

这在我的route.py文件中:

@app.route('/admin/orders', methods=["GET", "POST"])
def orders():
    if request.method == "POST":
        for order in system.orders:
            if request.form["status"] == str(order.orderID):
                order.setOrderStatus("ready for pick-up")
                return redirect(url_for('orders'))
            if request.form["delete"] == str(order.orderID):
                order.deleteOrder(order.currOrder)
                return redirect(url_for('orders'))
    return render_template("orders.html", system = system)

这是在我的html / jinja文件中的order.html:

<form action="POST">
{% for order in system.orders %}
    <p style="white-space: pre; font-size: 30px;">{{order.print}}

    <button type = "submit" name="status" class="choice" value="{{order.orderID}}" style = "margin:10px">Change Status</button>

    <button type = "submit" name="delete" class="choice" value="{{order.orderID}}" style = "margin:10px;">Delete Order</button>
    </p>
{% endfor %}
</form>

我希望能够单击一个按钮并转到具有更新的订单状态或已删除订单的页面。目前,我被放置在URL末尾的POST?status = 1页面上,而只有标题的黑页上

3 个答案:

答案 0 :(得分:1)

仅出于完整性考虑:您可以使用HTML输入formaction属性来提交不同的URL,具体取决于所按下的按钮。这样,您可以完全跳过服务器端逻辑。在上面的示例中,它看起来像这样:

{% for order in system.orders %}
<p style="white-space: pre; font-size: 30px;">{{order.print}}
    <button type="submit" formaction="{{ url_for('insert_route', id=order.id) }}" class="choice" name="{{order.orderID}}CS" style = "margin:10px">Change Status</button>
    <button type="submit" formaction="{{ url_for('delete_route', id=order.id) }}" class="choice" name="{{order.orderID}}DO" style = "margin:10px; margin-right:30px;">Delete Order</button>
</p>
{% endfor %}

答案 1 :(得分:0)

我曾经做过这样的事情。替换#不知道在这里填写什么:

if request.method == "POST":

    if request.form["submit"] == "change_status":
        return redirect(url_for('<insert route>'))

    if request.form["submit"] == "delete_order":
        return redirect(url_for('<insert route>'))

并在模板中的按钮上添加一个值,然后将其包装在表单标签中。

<button type="submit" class="choice" name="{{order.orderID}}CS" style = "margin:10px" value = "change_status">Change Status</button>
<button type="submit" class="choice" name="{{order.orderID}}DO" style = "margin:10px; margin-right:30px;" value = "delete_order">Delete Order</button>

答案 2 :(得分:0)

<form action="POST">

应为:

<form method="POST">