首页 > 解决方案 > Flask:使用来自 POST 请求的响应呈现 jinja 模板

问题描述

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

后端cart收到就好了,可以毫无问题地生成列表,但我无法将列表获取到 cart.html 页面(看起来好像cart是空的)。POST 请求是否应该不在 cart.html 上,而是通过重定向来解决?如果是这样,我该怎么做?如果可能的话,我想避免在 cart.html 上有一个“加载购物车”按钮。

这是 cart.html 的开头(我尝试将 ajax 调用设置为 async: false,但它并没有阻止页面呈现没有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>
...

这是我的路线:

@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)

编辑:已解决

我发现使用 ajax 和 localstorage 更容易跳过,而是使用易于在后端访问的 cookie:无需cart在呈现页面之前生成请求。

标签: pythonjqueryflaskjinja2

解决方案


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


推荐阅读