Фильтр False в списке булевых чисел
У меня есть пять объектов Product, в которых доступность 3 продуктов установлена на True, а остальных на False, я пытаюсь установить кнопку Checkout Status Button на Out of Stock, даже если у одного продукта доступность установлена на False.
Поскольку представление корзины не может использовать slug, {% if product.availability %}
бессмысленно, и не может использовать 'for loop', иначе это создаст несколько кнопок оформления заказа, как это исправить?
Модель
class Product(models.Model):
availablity = models.BooleanField()
View
def cart(request):
products = Product.objects.all()
Шаблон корзины
{% for product in products %}
<p>{product.name}</p>
<p>{product.price}</p>
{% endfor %}
<!--Checkout Status Button-->
{% if product.availability %}
<a href="#">Checkout</a>
{% else %}
<p>Out of stock</p>
{% endif %}
def cart(request):
products = Product.objects.all()
availibility = True
for prod in products:
if prod.availability = False:
availability = False
break
context = { "products" :products, "availability" :availability }
в Html
if availability` True then show `Checkout` else `Out of Stock`
В представлении корзины вы могли бы добавить контекстный словарь к вызову render()
?
Так что в основном :
- Проверьте
products
условие доступности и установите переменнуюavailable
в True/False .
- измените вызов рендеринга на
render(cart_template, {'products' : products, 'available' : available})
- измените шаблон корзины на
{% if available %}
Вы должны сделать все вычисления в view
и отправить только один True/False
в шаблон.
Например
products = Product.objects.all()
available = all(x.availability for x in products)
context = {..., "available": available}
{% if available %}
<a href="#">Checkout</a>
{% else %}
<p>Out of stock</p>
{% endif %}