def myitems_index(request, view_name, page_title, no_items_message, index_name, only_published=True, template="myitems/index.html"): breadcrumbs = [ {"url": reverse("myitems:myitems"), "title": u"My Items"}, {"url": reverse("myitems:%s" % view_name), "title": page_title}, ] query_string_params = {} index_params = IndexParams(request) query_string_params = index_params.update_query_string_params(query_string_params) batch_end = index_params.batch_start + index_params.batch_size query = SearchQuerySet() if only_published: query = query.narrow("is_displayed:true") query = query.narrow("%s:%i" % (index_name, request.user.id)) if index_params.query_order_by is not None: query = query.order_by(index_params.query_order_by) items = [] results = query[index_params.batch_start:batch_end] for result in results: items.append(populate_item_from_search_result(result)) pagination = Pagination(request.path, query_string_params, index_params.batch_start, index_params.batch_size, len(query)) return direct_to_template(request, template, locals())
def get_context_data(self, **kwargs): data = super(BaseViewItemMixin, self).get_context_data(**kwargs) item = self.item request = self.request model = self.model content_type = self.content_type data["item"] = item data["content_type"] = content_type microsite = None came_from_index = False prev_item_url = u"" next_item_url = u"" index_url = u"" kwargs = {} filters = {} index_path = None if "_i" in request.COOKIES: filters = dict(QueryDict(urllib.unquote(request.COOKIES["_i"]))) #noinspection PyArgumentEqualDefault index_path = filters.pop("index_path", None) if index_path and isinstance(index_path, list): index_path = index_path[0] if index_path: try: kwargs = resolve(index_path)[2] came_from_index = True except Http404: pass if came_from_index: query = SearchQuerySet().narrow("is_displayed:true") index_model = kwargs.get("model") microsite = kwargs.get("microsite") if microsite: microsite = Microsite.objects.get(slug=microsite) if index_model: query = query.models(index_model) path_filter = None query_string_params = {} search_query = u"" for filter_name in PATH_FILTERS: value = kwargs.get(filter_name) if value is not None: filter = FILTERS[filter_name] query = filter.update_query(query, value) path_filter = filter_name break dummy_request = DummyRequest(filters) for filter_name, filter in FILTERS.items(): if filter_name == path_filter: continue value = filter.extract_value(dummy_request) if value is not None: query = filter.update_query(query, value) query_string_params = filter.update_query_string_params(query_string_params, value) if filter_name == "search": search_query = value index_params = IndexParams(dummy_request, search_query=search_query) query_string_params = index_params.update_query_string_params(query_string_params) if index_params.query_order_by is not None: query = query.order_by(index_params.query_order_by) current_item_idx = 0 item_found = False for result in query: if result.model == model and int(result.pk) == item.id: if current_item_idx > 0: prev_item = query[current_item_idx - 1] namespace = getattr(prev_item.model, "namespace", None) if namespace: prev_item_url = reverse("materials:%s:%s" % (namespace, self.view_item_name), kwargs=dict(slug=prev_item.get_stored_fields()["slug"])) else: prev_item_url = prev_item.object.get_absolute_url() if current_item_idx < (len(query) - 1): next_item = query[current_item_idx + 1] namespace = getattr(next_item.model, "namespace", None) if namespace: next_item_url = reverse("materials:%s:%s" % (namespace, self.view_item_name), kwargs=dict(slug=next_item.get_stored_fields()["slug"])) else: next_item_url = next_item.object.get_absolute_url() item_found = True break current_item_idx += 1 batch_start = (current_item_idx / index_params.batch_size) * index_params.batch_size if batch_start: query_string_params["batch_start"] = batch_start if item_found: index_url = index_path + serialize_query_string_params(query_string_params) data["microsite"] = microsite data["came_from_index"] = came_from_index data["index_url"] = index_url data["prev_item_url"] = prev_item_url data["next_item_url"] = next_item_url if came_from_index: data["index_cookie"] = request.COOKIES.get("_i") if request.user.is_authenticated(): data["saved"] = SavedItem.objects.filter( content_type=content_type, object_id=item.id, user=request.user ).exists() data["save_url"] = reverse("materials:%s:save_item" % item.namespace, kwargs=dict(slug=item.slug)) data["unsave_url"] = reverse("materials:%s:unsave_item" % item.namespace, kwargs=dict(slug=item.slug)) data["comment_url"] = reverse( "reviews:review", kwargs=dict(content_type_id=content_type.id, object_id=item.id) ) data["add_tags_url"] = reverse("tags:add_tags", args=( content_type.app_label, content_type.model, item.id, )) return data
def __init__(self, *args, **kwargs): self.SORT_BY_OPTIONS = kwargs['SORT_BY_OPTIONS'] del kwargs['SORT_BY_OPTIONS'] IndexParams.__init__(self, *args, **kwargs)