def product_page(request, sku): if_email_add(request) user_details = get_user_details_json(request) product = Product.objects.get(pk=sku) # this is the redirect for products that are marked as identical if product.identicalto: return HttpResponseRedirect("/product/"+str(product.identicalto.id)+"/") if product: context = { 'product_id': sku, 'user_details': user_details, 'product': product, } return render(request, 'catalog/product_page_new.html', context) else: return HttpResponse('404 Error - this product does not exist')
def all_stores(request): if_email_add(request) # if request.user.is_authenticated() == False: # return HttpResponseRedirect("/launching_soon") login = request.user.is_authenticated() user_details = get_user_details_json(request) stores = Shop.objects.all() for store in stores: store.all_likes = LikeShop.objects.filter(shop=store) store.products = ProductShopUrl.objects.filter(shop=store).count() toindexstores = ToIndexStore.objects.all() context = { 'static_blob': static_blob, 'login': login, 'stores': stores, 'toindexstores': toindexstores, 'user_details': user_details, } return render(request, 'catalog/all_stores.html', context)
def search(request): if_email_add(request) login = request.user.is_authenticated() errors = [] if 'q' in request.GET: form = SearchForm({'q': request.GET['q'], }) cd = '' if form.is_valid(): cd = form.cleaned_data if cd: q = cd['q'] else: q = '' if not q: errors.append("Enter a search term.") elif len(q) < 1: errors.append("Enter atleast 1 characters.") elif len(q) > 50: errors.append("Enter atmost 50 characters.") else: if request.user.is_authenticated() is True: log = SearchLog(term=q, user=request.user, time=timezone.now()) else: log = SearchLog(term=q, time=timezone.now()) log.save() q_clean = unicodedata.normalize('NFKD', q).\ encode('ascii', 'ignore').translate(string.maketrans("", ""), string.punctuation).\ strip().split(" ") qs = reduce(operator.and_, (Q(name__icontains=n) for n in q_clean)) products = Product.objects.filter(qs).filter(identicalto=None).\ order_by('-score') paginator = Paginator(products, 30) page = request.GET.get('page') if not page: page = 1 try: products_page = paginator.page(page) except PageNotAnInteger: # If page is not an integer, deliver first page. products_page = paginator.page(1) page = 1 except EmptyPage: # If page is out of range (e.g. 9999), deliver last # page of results. products_page = paginator.page(paginator.num_pages) page = paginator.num_pages if int(paginator.num_pages) == 1: list_pages = [1] elif int(paginator.num_pages) <= 8: list_pages = range(1, int(paginator.num_pages)+1) elif int(page) <= 2: list_pages = range(1, 5) + ['. . .'] + [paginator.num_pages] elif int(page) >= int(paginator.num_pages) - 2: list_pages = [1, '. . .'] + range(paginator.num_pages-3, paginator.num_pages+1) else: list_pages = ['. . .'] + range(int(page)-2, int(page)+3) +\ ['. . .'] for product in products_page: img = ProductImage.objects.filter(product=product.id, is_enabled=True) if img: product.image_p = img[0] context = { 'static_blob': static_blob, 'products': products_page, 'list_pages': list_pages, 'total_products': 0, 'query': q, 'login': login, } return render(request, 'catalog/search_result.html', context) stores = Shop.objects.count() products = Product.objects.count() return render(request, 'catalog/search_form.html', {'static_blob': static_blob, 'login': login, 'errors': errors, "stores": stores, "products": products})