Flask:渲染jinja模板,并带有POST请求的响应

时间:2020-04-21 14:26:14

标签: python jquery flask jinja2

我有一个在线商店,该商店使用本地存储来跟踪购物车中有哪些产品(存储方式为AttributeError: 'numpy.int64' object has no attribute 'iloc' )。当用户导航到cart.html时,我想将cart = [{"id":"1"},{"id":"2"},{"id":"4"}]发送到我的后端,生成产品的完整列表,然后在cart调用中使用该列表。

后端可以正常接收return render_template,并且可以毫无问题地生成列表,但是我无法将列表发送到cart.html页面(好像cart为空) 。 POST请求是否应该不在cart.html上,而是通过重定向解决它?如果是这样,我该怎么做?我希望避免在cart.html上出现“加载购物车”按钮。

这是cart.html的开头(我曾尝试将ajax调用设置为async:false,但它没有阻止没有cart的页面的呈现:

cart

这是我的路线:

{% extends "layout.html" %}
{% block content %}

<script type="text/javascript">
    function sendCart() {
        $(document).ready(function() {
            $.ajax({
                url: "{{ url_for('cart', _external=True) }}",
                type: 'POST',
                data: JSON.stringify(JSON.parse(localStorage.getItem("cart"))),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
            }); 
        })
    }
    sendCart();
</script>
...

编辑:已解决

我发现使用ajax和localstorage可以更轻松地跳过,而使用后端易于访问的cookie:不需要请求,我可以在呈现页面之前生成@app.route('/cart', methods=['GET', 'POST']) @login_required def cart(): cart = [] if request.method == 'POST': for i in request.json: cart.append(get_Furniture(int(i['id']))) return render_template("cart.html", cart_objects = cart) return render_template("cart.html", cart_objects = cart)

1 个答案:

答案 0 :(得分:0)

我发现使用ajax和localstorage可以更轻松地跳过,而使用后端易于访问的cookie:不需要请求,我可以在呈现页面之前生成购物车。