Flask: Визуализация шаблона jinja с ответом на POST-запрос - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть интернет-магазин, который использует локальное хранилище, чтобы отслеживать, какие продукты находятся в корзине (хранятся как cart = [{"id":"1"},{"id":"2"},{"id":"4"}]). Когда пользователь переходит к корзине. html, я хочу отправить cart в свой бэкэнд, сгенерировать полный список продуктов, а затем использовать этот список в вызове return render_template.

Бэкэнд получает cart очень хорошо и может генерировать список без проблем, но я не могу получить список в корзину. html страница (похоже, что cart пусто). Разве запрос POST не должен быть в корзине. html, а вместо этого решать его с помощью перенаправлений? Если да, то как мне это сделать? Я бы хотел, чтобы на корзине не было кнопки «загрузить корзину». html, если возможно.

Это начало корзины. html (я пытался установить ajax вызов asyn c: 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 и localalstorage, вместо этого используя повар ie, который легко доступен в бэкэнде: без необходимости запроса я могу сгенерировать cart перед рендерингом страницы.

1 Ответ

0 голосов
/ 22 апреля 2020

Мне было легче пропустить, используя ajax и localalstorage, вместо этого используя повар ie, который легко доступен в бэкэнде: без необходимости запроса я могу сгенерировать корзину перед рендерингом страницы.

...