def buildListHTML(self, pageNumber, propertyName, parent): modelClass, modelClassName = self.modelClass, self.modelClassName modelClassDisplayName = modelClass.getPrettyClassName() if propertyName and parent: gql = 'WHERE %s = :1 ORDER BY %s' % (propertyName, modelClass.NAME_PROPERTY) #logging.debug(gql + '(' + parent + ')') models = (propertyName and modelClass.gql( gql, db.get(parent))) or modelClass.get() else: models = modelClass.all() paginator = ObjectPaginator(models, 10, orphans=2) if paginator.pages < pageNumber: pageNumber = paginator.pages pageNumber0 = pageNumber - 1 models = paginator.get_page(pageNumber0) firstOnPage, lastOnPage, numModels = \ paginator.first_on_page(pageNumber0), paginator.last_on_page(pageNumber0), paginator.hits hasPreviousPage, hasNextPage = \ paginator.has_previous_page(pageNumber0), paginator.has_next_page(pageNumber0) previousPage, nextPage = pageNumber - 1, pageNumber + 1 listItems = [] for model in models: modelToListItemHTML = \ lambda model, s=self, p=parent, pn=propertyName: s.modelToListItemHTML(model,p,pn) cacheKey = 'listItemHTML' + parent self.modelClass.setEntityCacheFunctionForKey( modelToListItemHTML, cacheKey) listItems.append(model.getEntityCache(cacheKey)) listItems = '\n'.join(listItems) return self.renderManagementTemplate(locals(), 'List.html')
def __init__(self, searchResults, handler, title, user): self.user, self.handler = user, handler self.rootNode = rootNode = ElementTree.Element('SearchResults') ElementTree.ElementTree.__init__(self, rootNode) rootNode.set('title', title) rootNode.set('pagelessUrl', self.getPagelessUrlFromHandler(handler)) # Don't limit the number of results if viewing the characters in a campaign. hitsPerPage = handler.request.get('campaign', None) and 100 or self.HITS_PER_PAGE paginator = ObjectPaginator(searchResults, hitsPerPage, orphans=self.ORPHANS_PER_PAGE) pageNumber = int(handler.request.get('p', '1')) numPages = paginator.pages pageNumber = min(numPages, pageNumber) pageNumber0 = pageNumber - 1 firstOnPage, lastOnPage, numResults = \ paginator.first_on_page(pageNumber0), paginator.last_on_page(pageNumber0), paginator.hits firstOnPage = lastOnPage and firstOnPage or 0 # so firstOnPage isn't 1 when there are 0 results localVars = locals() for thisVar in ('numResults', 'numPages', 'pageNumber', 'firstOnPage', 'lastOnPage'): rootNode.set(thisVar, str(localVars[thisVar])) try: [ self.addResult(thisResult, user) for thisResult in paginator.get_page(pageNumber0) ] except AttributeError: raise raise RuntimeError, 'expecting searchResults, got %(searchResults)r' % locals()
def buildListHTML(self, pageNumber, propertyName, parent): modelClass, modelClassName = self.modelClass, self.modelClassName modelClassDisplayName = modelClass.getPrettyClassName() if propertyName and parent: gql = "WHERE %s = :1 ORDER BY %s" % (propertyName, modelClass.NAME_PROPERTY) # logging.debug(gql + '(' + parent + ')') models = (propertyName and modelClass.gql(gql, db.get(parent))) or modelClass.get() else: models = modelClass.all() paginator = ObjectPaginator(models, 10, orphans=2) if paginator.pages < pageNumber: pageNumber = paginator.pages pageNumber0 = pageNumber - 1 models = paginator.get_page(pageNumber0) firstOnPage, lastOnPage, numModels = ( paginator.first_on_page(pageNumber0), paginator.last_on_page(pageNumber0), paginator.hits, ) hasPreviousPage, hasNextPage = paginator.has_previous_page(pageNumber0), paginator.has_next_page(pageNumber0) previousPage, nextPage = pageNumber - 1, pageNumber + 1 listItems = [] for model in models: modelToListItemHTML = lambda model, s=self, p=parent, pn=propertyName: s.modelToListItemHTML(model, p, pn) cacheKey = "listItemHTML" + parent self.modelClass.setEntityCacheFunctionForKey(modelToListItemHTML, cacheKey) listItems.append(model.getEntityCache(cacheKey)) listItems = "\n".join(listItems) return self.renderManagementTemplate(locals(), "List.html")
def wrapper(request, *args, **kwargs): page = kwargs.pop('page', None) variables = func(request, *args, **kwargs) object_list = variables['object_list'] paginate_by = variables.get('paginate_by', 10) paginator = Paginator(object_list, paginate_by) if not page: page = request.GET.get('page', 1) try: page_number = int(page) except ValueError: if page == 'last': page_number = paginator.pages else: # Page is not 'last', nor can it be converted to an int raise Http404 try: object_list = paginator.get_page(page_number - 1) except InvalidPage: if page_number == 1 and allow_empty: object_list = [] else: raise Http404 variables.update({ 'object_list': object_list, 'paginate_by': paginate_by, 'page': page, 'is_paginated': paginator.pages > 1, 'results_per_page': paginate_by, 'has_next': paginator.has_next_page(page_number - 1), 'has_previous': paginator.has_previous_page(page_number - 1), 'page': page_number, 'next': page_number + 1, 'previous': page_number - 1, 'last_on_page': paginator.last_on_page(page_number - 1), 'first_on_page': paginator.first_on_page(page_number - 1), 'pages': paginator.pages, 'hits' : paginator.hits, 'page_range' : paginator.page_range }) string = django_template_to_string(request, variables, template) return HttpResponse(string)