#flask
#колба
Вопрос:
Я использую сеансы flask для хранения списка словарей для корзины покупок на Python. Когда товар добавляется в корзину, он получает словарь (добавляется в корзину). Если товар (‘prod_id’) уже существует в корзине, словарь получает обновленное количество (обновлено в корзине). Это работает нормально, но у меня возникли проблемы с отображением в корзине колбы обновленного количества продукта, когда продукт уже существует в корзине. Мне нужно только обновленное количество (для «prod_id»), чтобы оно отображалось в представлении корзины колб. Это отображается, когда я распечатываю/сбрасываю корзину сеансов. Полностью выполняемый код с дополнительными инструкциями печати. Любая помощь будет признательна.
Что я пробовал
-
session.pop('prod_quantity', None)
-
session.modified = True
- Получил
TypeError: pop expected at most 1 argument, got 2
-
session.pop('prod_quantity')
-
session.modified = True
- Получил
TypeError: 'str' object cannot be interpreted as an integer
Код на Python
def product_exists(product: dict, cart: list): added_id = product.get("prod_id") in_cart = [existing_prod for existing_prod in cart if existing_prod.get("prod_id") == added_id] if in_cart and len(in_cart) gt; 0: return True, in_cart return False, None add_product = {'prod_id': 19, 'prod_name': 'Velociraptor', 'prod_price': 40, 'prod_quantity': 4} matching_product = [{'prod_id': 19, 'prod_name': 'Velociraptor', 'prod_price': 40, 'prod_quantity': 3}] cart_products = [{'prod_id': 15, 'prod_name': 'Penguin', 'prod_price': 40, 'prod_quantity': 2}, {'prod_id': 16, 'prod_name': 'Lion', 'prod_price': 20, 'prod_quantity': 4}, {'prod_id': 17, 'prod_name': 'Whale', 'prod_price': 20, 'prod_quantity': 3}, {'prod_id': 18, 'prod_name': 'Cat', 'prod_price': 30, 'prod_quantity': 1}, {'prod_id': 19, 'prod_name': 'Velociraptor', 'prod_price': 40, 'prod_quantity': 7}] exists, matching_product = product_exists(add_product, cart_products) if exists: # exists = True print(f"Matching product {matching_product}") update_quantity = matching_product[0]['prod_quantity'] add_product['prod_quantity'] print(f"Updated quantity {update_quantity}") add_product.update({'prod_quantity': update_quantity}) print(f"Product dict with updated quantity {add_product}") cart_products = [add_product if product['prod_id'] == add_product['prod_id'] else product for product in cart_products] print(f"Product dict in {cart_products}") print(cart_products[0]["prod_quantity"]) else: cart_products.append(add_product)
Вид колбы
{% for product in cart_products %} lt;trgt; lt;tdgt;{{ product.prod_name }}lt;/tdgt; lt;tdgt;{{ product.prod_price }}lt;/tdgt; lt;tdgt;{{ product.prod_quantity }}lt;/tdgt; lt;tdgt;lt;/tdgt; lt;/trgt; {% endfor %}
Ответ №1:
Оказывается, все, что мне было нужно, — это записать изменения в корзину сеансов:
session["cart"] = cart_products