def personas(request, category=None, template=None): categories, filter, base, category = personas_listing(request, category) # Pass the count from base instead of letting it come from # filter.qs.count() since that would join against personas. count = category.count if category else base.count() if ('sort' not in request.GET and ((request.MOBILE and not category) or (not request.MOBILE and count > 4))): template += 'category_landing.html' else: template += 'grid.html' addons = amo.utils.paginate(request, filter.qs, 30, count=count) if category: ids = AddonCategory.creatured_random(category, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") else: ids = Addon.featured_random(request.APP, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") ctx = {'categories': categories, 'category': category, 'addons': addons, 'filter': filter, 'sorting': filter.field, 'sort_opts': filter.opts, 'featured': featured, 'search_cat': 'personas', 'is_homepage': category is None and 'sort' not in request.GET} return jingo.render(request, template, ctx)
def _landing(request, category=None): if category: featured = '' category = get_list_or_404( Category.objects.filter(type=amo.ADDON_PERSONA, slug=category))[0] popular = (Addon.objects.public() .filter(type=amo.ADDON_PERSONA, addoncategory__category__id=category.id) .order_by('-persona__popularity')[:12]) categories, filter, base, category = personas_listing(request, category.slug) ids = AddonCategory.creatured_random(category, request.LANG) featured = manual_order(base, ids, pk_name="addons.id")[:12] else: popular = (Addon.objects.public().filter(type=amo.ADDON_PERSONA) .order_by('-persona__popularity')[:12]) featured = get_featured_personas(request, num_personas=12) return jingo.render(request, 'themes/landing.html', { 'category': category, 'popular': popular, 'featured': featured, })
def personas(request, category=None, template=None): categories, filter, base, category = personas_listing(request, category) # Pass the count from base instead of letting it come from # filter.qs.count() since that would join against personas. count = category.count if category else base.count() if "sort" not in request.GET and ((request.MOBILE and not category) or (not request.MOBILE and count > 4)): template += "category_landing.html" else: template += "grid.html" addons = amo.utils.paginate(request, filter.qs, 30, count=count) if category: ids = AddonCategory.creatured_random(category, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") else: ids = Addon.featured_random(request.APP, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") ctx = { "categories": categories, "category": category, "addons": addons, "filter": filter, "sorting": filter.field, "sort_opts": filter.opts, "featured": featured, "search_cat": "personas", "is_homepage": category is None and "sort" not in request.GET, } return jingo.render(request, template, ctx)
def creatured(request, category): TYPE = amo.ADDON_EXTENSION q = Category.objects.filter(application=request.APP.id, type=TYPE) category = get_object_or_404(q, slug=category) ids = AddonCategory.creatured_random(category, request.LANG) addons = manual_order(Addon.objects.public(), ids, pk_name="addons.id") return render(request, "browse/creatured.html", {"addons": addons, "category": category, "sorting": "featured"})
def personas(request, category=None, template=None): categories, filter, base, category = personas_listing(request, category) # Pass the count from base instead of letting it come from # filter.qs.count() since that would join against personas. count = category.count if category else base.count() if ('sort' not in request.GET and ((request.MOBILE and not category) or (not request.MOBILE and count > 4))): template += 'category_landing.html' else: template += 'grid.html' addons = amo.utils.paginate(request, filter.qs, 30, count=count) if category: ids = AddonCategory.creatured_random(category, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") else: ids = Addon.featured_random(request.APP, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") ctx = { 'categories': categories, 'category': category, 'addons': addons, 'filter': filter, 'sorting': filter.field, 'sort_opts': filter.opts, 'featured': featured, 'search_cat': 'personas', 'is_homepage': category is None and 'sort' not in request.GET } return jingo.render(request, template, ctx)
def personas(request, category=None): categories, filter, base, category = personas_listing(request, category) # Pass the count from base instead of letting it come from # filter.qs.count() since that would join against personas. count = category.count if category else base.count() if 'sort' in request.GET or count < 5: template = 'grid.html' else: template = 'category_landing.html' addons = amo.utils.paginate(request, filter.qs, 30, count=count) if category: ids = AddonCategory.creatured_random(category, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") else: ids = Addon.featured_random(request.APP, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") is_homepage = category is None and 'sort' not in request.GET return jingo.render(request, 'browse/personas/' + template, {'categories': categories, 'category': category, 'filter': filter, 'addons': addons, 'featured': featured, 'is_homepage': is_homepage, 'search_cat': 'personas'})
def creatured(request, category): TYPE = amo.ADDON_EXTENSION q = Category.objects.filter(application=request.APP.id, type=TYPE) category = get_object_or_404(q, slug=category) ids = AddonCategory.creatured_random(category, request.LANG) addons = manual_order(Addon.objects.public(), ids, pk_name='addons.id') return render(request, 'browse/creatured.html', {'addons': addons, 'category': category, 'sorting': 'featured'})
def personas(request, category=None, template=None): listing = personas_listing(request, category) # I guess this was a Complete Theme after all. if isinstance(listing, (HttpResponsePermanentRedirect, HttpResponseRedirect)): return listing categories, filter_, base, cat = listing if filter_.field == 'up-and-coming': # Almost hardcoding the number of element because performing # `filter_.qs.count()` is a performance killer. We're still # verifying the `base.count()` for the template switch below. base_count = base.count() count = (base_count if base_count < MIN_COUNT_FOR_LANDING else PAGINATE_PERSONAS_BY * settings.PERSONA_DEFAULT_PAGES) else: # Pass the count from base instead of letting it come from # filter_.qs.count() since that would join against personas. count = cat.count if cat else base.count() addons = amo.utils.paginate(request, filter_.qs, PAGINATE_PERSONAS_BY, count=count) if ('sort' not in request.GET and ((request.MOBILE and not cat) or (not request.MOBILE and count > MIN_COUNT_FOR_LANDING))): template += 'category_landing.html' else: template += 'grid.html' if cat: ids = AddonCategory.creatured_random(cat, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") else: ids = Addon.featured_random(request.APP, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") ctx = { 'categories': categories, 'category': cat, 'addons': addons, 'filter': filter_, 'sorting': filter_.field, 'sort_opts': filter_.opts, 'featured': featured, 'search_cat': 'themes', 'is_homepage': cat is None and 'sort' not in request.GET } return render(request, template, ctx)
def personas(request, category=None, template=None): listing = personas_listing(request, category) # I guess this was a Complete Theme after all. if isinstance(listing, (HttpResponsePermanentRedirect, HttpResponseRedirect)): return listing categories, filter_, base, cat = listing if filter_.field == "up-and-coming": # Almost hardcoding the number of element because performing # `filter_.qs.count()` is a performance killer. We're still # verifying the `base.count()` for the template switch below. base_count = base.count() count = ( base_count if base_count < MIN_COUNT_FOR_LANDING else PAGINATE_PERSONAS_BY * settings.PERSONA_DEFAULT_PAGES ) else: # Pass the count from base instead of letting it come from # filter_.qs.count() since that would join against personas. count = cat.count if cat else base.count() addons = amo.utils.paginate(request, filter_.qs, PAGINATE_PERSONAS_BY, count=count) if "sort" not in request.GET and ( (request.MOBILE and not cat) or (not request.MOBILE and count > MIN_COUNT_FOR_LANDING) ): template += "category_landing.html" else: template += "grid.html" if cat: ids = AddonCategory.creatured_random(cat, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") else: ids = Addon.featured_random(request.APP, request.LANG) featured = manual_order(base, ids, pk_name="addons.id") ctx = { "categories": categories, "category": cat, "addons": addons, "filter": filter_, "sorting": filter_.field, "sort_opts": filter_.opts, "featured": featured, "search_cat": "themes", "is_homepage": cat is None and "sort" not in request.GET, } return render(request, template, ctx)
def __init__(self, request, base, category, key, default): self.category = category self.ids = AddonCategory.creatured_random(category, request.LANG) super(CategoryLandingFilter, self).__init__(request, base, key, default)