Aula 74 – Loja Online – Botão de Adicionar na Lista de Produtos
Aula 74 – Loja Online – Botão de Adicionar na Lista de Produtos
Voltar para página principal do blog
Todas as aulas desse curso
Aula 73 Aula 75
Redes Sociais:
Meus links de afiliados:
Hostinger
Digital Ocean
One.com
Melhore seu NETWORKING
https://digitalinnovation.one/
Participe de comunidades de desenvolvedores:
Fiquem a vontade para me adicionar ao linkedin.
E também para me seguir no https://github.com/toticavalcanti.
Código final da aula:
https://github.com/toticavalcanti
Quer aprender python3 de graça e com certificado? Acesse então:
https://workover.com.br/python-codigo-fluente
Canais do Youtube
Toti
Backing Track / Play-Along
Código Fluente
Putz!
Vocal Techniques and Exercises
PIX para doações
Aula 74 – Loja Online – Botão de Adicionar na Lista de Produtos
Vamos adicionar um botão de adicionar ao carrinho, em cada produto na página de listagem de produtos.
Vamos então pegar o código que tá em: django_ecommerce/e_commerce/products/templates/products/detail.html
{% include 'products/snippets/update-cart.html' with product=object cart=cart %}
E colar no:
django_ecommerce/e_commerce/products/templates/products/snippets/card.html
E fazer as modificações que estão em verde.
django_ecommerce/e_commerce/products/templates/products/snippets/card.html
<div class="card" style="width: 18rem;">
{% if instance.image %}
<a href="{{ instance.get_absolute_url }}">
<img src="{{ instance.image.url }}" class="card-img-top" alt="{{ instance.title }} logo">
</a>
{% endif %}
<div class="card-body">
<h5 class="card-title">{{ instance.title }}</h5>
<p class="card-text">{{ instance.description|truncatewords:14 }}</p>
<a href="{{ instance.get_absolute_url }}" class="btn btn-primary">Detalhe</a>
{% include 'products/snippets/update-cart.html' with product=instance cart=cart %}
<!--<a href="{% url 'products:detail' slug=instance.slug %}" class="btn btn-warning">Atalho para a URL</a>-->
</div>
</div>
Agora vamos copiar o método get_context_data() que tá dentro do ProductDetailSlugView(), colocar a cópia dentro do ProductListView() e fazer algumas adaptações, que estão em verde.
django_ecommerce/e_commerce/products/views.py
from django.http import Http404
from django.views.generic import ListView, DetailView
from django.shortcuts import render, get_object_or_404
from carts.models import Cart
from .models import Product
class ProductFeaturedListView(ListView):
template_name = "products/list.html"
def get_queryset(self, *args, **kwargs):
request = self.request
return Product.objects.featured()
class ProductFeaturedDetailView(DetailView):
queryset = Product.objects.all().featured()
template_name = "products/featured-detail.html"
#Class Based View
class ProductListView(ListView):
#traz todos os produtos do banco de dados sem filtrar nada
queryset = Product.objects.all()
template_name = "products/list.html"
# def get_context_data(self, *args, **kwargs):
# context = super(ProductListView, self).get_context_data(*args, **kwargs)
# print(context)
# return context
def get_context_data(self, *args, **kwargs):
context = super(ProductListView, self).get_context_data(*args, **kwargs)
cart_obj, new_obj = Cart.objects.new_or_get(self.request)
context['cart'] = cart_obj
return context
#Function Based View
def product_list_view(request):
queryset = Product.objects.all()
context = {
'object_list': queryset
}
return render(request, "products/list.html", context)
class ProductDetailSlugView(DetailView):
queryset = Product.objects.all()
template_name = "products/detail.html"
def get_context_data(self, *args, **kwargs):
context = super(ProductDetailSlugView, self).get_context_data(*args, **kwargs)
cart_obj, new_obj = Cart.objects.new_or_get(self.request)
context['cart'] = cart_obj
return context
def get_object(self, *args, **kwargs):
slug = self.kwargs.get('slug')
#instance = get_object_or_404(Product, slug = slug, active = True)
try:
instance = Product.objects.get(slug = slug, active = True)
except Product.DoesNotExist:
raise Http404("Não encontrado!")
except Product.MultipleObjectsReturned:
qs = Product.objects.filter(slug = slug, active = True)
instance = qs.first()
return instance
#Class Based View
class ProductDetailView(DetailView):
template_name = "products/detail.html"
def get_context_data(self, *args, **kwargs):
context = super(ProductDetailView, self).get_context_data(*args, **kwargs)
print(context)
return context
def get_object(self, *args, **kwargs):
pk = self.kwargs.get('pk')
instance = Product.objects.get_by_id(pk)
if instance is None:
raise Http404("Esse produto não existe!")
return instance
#Function Based View
def product_detail_view(request, pk = None, *args, **kwargs):
instance = Product.objects.get_by_id(pk)
print(instance)
if instance is None:
raise Http404("Esse produto não existe!")
context = {
'object': instance
}
return render(request, "products/detail.html", context)
Execute o servidor e teste.