Exemplo n.º 1
0
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())
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 def __init__(self, *args, **kwargs):
     self.SORT_BY_OPTIONS = kwargs['SORT_BY_OPTIONS']
     del kwargs['SORT_BY_OPTIONS']
     IndexParams.__init__(self, *args, **kwargs)