【问题标题】:Django: urls in html form not working correctlyDjango:html 格式的 url 无法正常工作
【发布时间】:2019-05-03 16:08:58
【问题描述】:

我正在建立电子商务网站,我有一个带有商品的购物车模型,我希望客户选择他们想要购买的某个商品的数量,这就是我将所有内容放在表单中以供以后使用的原因通过request.POST.getlist('quantity') 获取views.py 中的数量并将数据传递给'Sales:checkout'。但在那里我还有一个按钮可以从购物车中删除单个项目 (Sales:delete_cart_item) 和一个用于清空整个购物车的按钮 (Sales:empty_cart)。

现在问题来了,当我按下后面的任何一个按钮时,无论是Sales:delete_cart_item 还是Sales:empty_cart,它们都执行Sales:checkout,请帮我弄清楚我做错了什么

来自shopping_cart.html

<form action="{% url 'Sales:checkout' %}" method="POST">
    {% csrf_token %}
    {% for item in items %}
        <td>{{ item.item.item_name }}</td>
        <td>
            <input type="number" name="quantity" min="1" max="{{ item.item.stock_level }}">
        </td>
        <td>{{ item.item.id }}</td>
        <td>
            <a href="{% url 'Sales:delete_cart_item' item.id %}"><button>Delete row</button></a>
        </td>
    {% endfor %}
    <form action="Sales:empty_cart" method="POST">
        <button type="submit">Empty Cart</button>
    </form>
    <button type="submit">Continue to Secure Checkout</button>
</form>

请询问您是否需要更多详细信息,我愿意以任何方式解决此问题,即使它可能需要重写视图,我不一定要将所有内容放在表单中,这只是最接近的我必须这样做

【问题讨论】:

    标签: python html django forms templates


    【解决方案1】:

    这是因为您的两个按钮在被点击时都会触发提交结帐表单。

    您不应该将一个表单放在另一个表单中,因为任何提交按钮,即使是在“内部”表单中,都会导致提交“外部”表单。

    因此,我建议您将“删除商品”(连同其包装链接)和“空购物车”按钮(连同后者的表单)移到结帐表单之外。

    【讨论】:

    • 如果我将Sales:empty_cart 移出表格,它会起作用,但Sales:delete_cart_item 应该是每个项目的单独的,所以它应该留在for 循环中编辑:没关系,我只是想为 Sales:delete_cart_item 写另一个 {% for %} 循环,但在表单之外,谢谢你让我走上正确的道路。这可能不是最佳做法,但它暂时解决了我的问题,我稍后会研究更好的方法并更新此评论
    • 刚刚想到:您可以将Sales:delete_cart_item 保留在表单中,然后在删除&lt;button&gt; 上添加type="button" 属性。这样就不会触发表单提交。
    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 2016-12-28
    • 2014-10-07
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 2019-02-15
    相关资源
    最近更新 更多