def paginate(self, templ_vars): extra_pages = [] logging.debug('called pagination for {0}'.format(self.meta['slug'])) if 'page_items' not in self.meta['pagination']: logging.debug('doing pagination for {0}'.format(self.meta['slug'])) # This is the first page of a set of pages. Set up the rest. Other # wise don't do anything. source_spec = self.meta['pagination']['list'].split('.') logging.debug('pagination source is: ' + repr(source_spec)) if source_spec[0] == 'page': source = self.meta source_spec.pop(0) elif source_spec[0] == 'site': source = templ_vars['site'] source_spec.pop(0) else: logging.error('Unknown pagination source! Not paginating') return for k in source_spec: source = source[k] sort_key = self.meta['pagination'].get('sort_key', None) sort_reverse = self.meta['pagination'].get('sort_reverse', False) logging.debug('sort_key: {0}, sort_reverse: {1}'.format( sort_key, sort_reverse)) if not source: return extra_pages if isinstance(source[0], Page): source = [p.meta for p in source] if sort_key is not None: if isinstance(source[0], dict): source.sort(key=lambda x: x[sort_key], reverse=sort_reverse) else: source.sort(key=lambda x: x.__getattribute__(sort_key), reverse=sort_reverse) chunks = list(util.chunk(source, self.meta['pagination']['limit'])) if not chunks: return extra_pages # Make a page for each chunk for idx, chunk in enumerate(chunks[1:], 2): new_meta = copy.deepcopy(self.meta) new_meta.update({ 'url': self.url_pattern, 'pagination': { 'page_items': chunk, 'num_pages': len(chunks), 'cur_page': idx, } }) new_page = self.from_meta(new_meta, self.options, self.engine, renderer=self.renderer) logging.debug('page {0} is {1}'.format(idx, new_page)) if new_page: extra_pages.append(new_page) # Set up the next/previous page links for idx, page in enumerate(extra_pages): if idx == 0: page.meta['pagination']['prev_page'] = self.meta else: page.meta['pagination']['prev_page'] = extra_pages[idx-1].meta if idx < len(extra_pages) - 1: page.meta['pagination']['next_page'] = extra_pages[idx+1].meta else: page.meta['pagination']['next_page'] = None # Pagination date for this page self.meta['pagination'].update({ 'page_items': chunks[0], 'num_pages': len(chunks), 'cur_page': 1, }) # Extra pages doesn't include the first page, so if there is at # least one, then make a link to the next page. if len(extra_pages) > 0: self.meta['pagination']['next_page'] = extra_pages[0].meta return extra_pages
def paginate(self): extra_pages = [] logging.debug('called pagination for {0}'.format(self.meta['slug'])) if 'page_items' not in self.meta['pagination']: logging.debug('doing pagination for {0}'.format(self.meta['slug'])) # This is the first page of a set of pages. Set up the rest. Other # wise don't do anything. source_spec = self.meta['pagination']['list'].split('.') logging.debug('pagination source is: ' + repr(source_spec)) if source_spec[0] == 'page': source = self.meta source_spec.pop(0) elif source_spec[0] == 'site': source = templ_vars['site'] source_spec.pop(0) else: logging.error('Unknown pagination source! Not paginating') return for k in source_spec: source = source[k] sort_key = self.meta['pagination'].get('sort_key', None) sort_reverse = self.meta['pagination'].get('sort_reverse', False) logging.debug('sort_key: {0}, sort_reverse: {1}'.format( sort_key, sort_reverse)) if not source: return extra_pages if isinstance(source[0], Page): source = [p.meta for p in source] if sort_key is not None: if isinstance(source[0], dict): source.sort(key=lambda x: x[sort_key], reverse=sort_reverse) else: source.sort(key=lambda x: x.__getattribute__(sort_key), reverse=sort_reverse) chunks = list(util.chunk(source, self.meta['pagination']['limit'])) if not chunks: return extra_pages # Make a page for each chunk for idx, chunk in enumerate(chunks[1:], 2): new_meta = copy.deepcopy(self.meta) new_meta.update({ 'url': self.url_pattern, 'pagination': { 'page_items': chunk, 'num_pages': len(chunks), 'cur_page': idx, } }) new_page = self.from_meta(new_meta, self.options, self.engine, renderer=self.renderer) logging.debug('page {0} is {1}'.format(idx, new_page)) if new_page: extra_pages.append(new_page) # Set up the next/previous page links for idx, page in enumerate(extra_pages): if idx == 0: page.meta['pagination']['prev_page'] = self.meta else: page.meta['pagination']['prev_page'] = extra_pages[idx - 1].meta if idx < len(extra_pages) - 1: page.meta['pagination']['next_page'] = extra_pages[idx + 1].meta else: page.meta['pagination']['next_page'] = None # Pagination date for this page self.meta['pagination'].update({ 'page_items': chunks[0], 'num_pages': len(chunks), 'cur_page': 1, }) # Extra pages doesn't include the first page, so if there is at # least one, then make a link to the next page. if len(extra_pages) > 0: self.meta['pagination']['next_page'] = extra_pages[0].meta return extra_pages
def paginate(self): extra_pages = [] if 'page_items' not in self.meta['pagination']: # This is the first page of a set of pages. Set up the rest. Other # wise don't do anything. source_spec = self.meta['pagination']['list'].split('.') logging.debug('source spec is: ' + repr(source_spec)) if source_spec[0] == 'page': source = self.meta source_spec.pop(0) elif source_spec[0] == 'site': source = templ_vars['site'] source_spec.pop(0) for k in source_spec: logging.debug(k) source = source[k] logging.debug('source is: ' + repr(source)) sort_key = self.meta['pagination'].get('sort_key', 'slug') sort_reverse = self.meta['pagination'].get('sort_reverse', False) logging.debug('sort_key: {0}, sort_reverse: {1}'.format( sort_key, sort_reverse)) if isinstance(source[0], Page): source = [p.meta for p in source] if isinstance(source[0], dict): source.sort(key=lambda x: x[sort_key], reverse=sort_reverse) else: source.sort(key=lambda x: x.__getattribute__(sort_key), reverse=sort_reverse) chunks = list(util.chunk(source, self.meta['pagination']['limit'])) # Make a page for each chunk for idx, chunk in enumerate(chunks[1:]): extra_meta = { 'pagination': { 'page_items': chunk, 'num_pages': len(chunks), 'cur_page': idx + 2, } } new_page = Page(self.path, self.options, renderer=self.renderer, extra_meta=extra_meta) extra_pages.append(new_page) # Set up the next/previous page links for idx, page in enumerate(extra_pages): if idx == 0: page.meta['pagination']['prev_page'] = self.meta else: page.meta['pagination']['prev_page'] = extra_pages[idx-1].meta if idx < len(extra_pages) - 1: page.meta['pagination']['next_page'] = extra_pages[idx+1].meta else: page.meta['pagination']['next_page'] = None # Pagination date for this page self.meta['pagination'].update({ 'page_items': chunks[0], 'num_pages': len(chunks), 'cur_page': 1, }) if len(extra_pages) > 1: self.meta['pagination']['next_page'] = extra_pages[0].meta return extra_pages
def paginate(self): extra_pages = [] if 'page_items' not in self.meta['pagination']: # This is the first page of a set of pages. Set up the rest. Other # wise don't do anything. source_spec = self.meta['pagination']['list'].split('.') logging.debug('pagination source is: ' + repr(source_spec)) if source_spec[0] == 'page': source = self.meta source_spec.pop(0) elif source_spec[0] == 'site': source = templ_vars['site'] source_spec.pop(0) else: logging.error('Unknown pagination source! Not paginating') return for k in source_spec: logging.debug(k) source = source[k] sort_key = self.meta['pagination'].get('sort_key', None) sort_reverse = self.meta['pagination'].get('sort_reverse', False) logging.debug('sort_key: {0}, sort_reverse: {1}'.format( sort_key, sort_reverse)) if not source: return extra_pages if isinstance(source[0], Page): source = [p.meta for p in source] if sort_key is not None: if isinstance(source[0], dict): source.sort(key=lambda x: x[sort_key], reverse=sort_reverse) else: source.sort(key=lambda x: x.__getattribute__(sort_key), reverse=sort_reverse) chunks = list(util.chunk(source, self.meta['pagination']['limit'])) if not chunks: return extra_pages # Make a page for each chunk for idx, chunk in enumerate(chunks[1:]): extra_meta = { 'pagination': { 'page_items': chunk, 'num_pages': len(chunks), 'cur_page': idx + 2, } } new_page = Page(self.path, self.options, renderer=self.renderer, extra_meta=extra_meta) extra_pages.append(new_page) # Set up the next/previous page links for idx, page in enumerate(extra_pages): if idx == 0: page.meta['pagination']['prev_page'] = self.meta else: page.meta['pagination']['prev_page'] = extra_pages[idx-1].meta if idx < len(extra_pages) - 1: page.meta['pagination']['next_page'] = extra_pages[idx+1].meta else: page.meta['pagination']['next_page'] = None # Pagination date for this page self.meta['pagination'].update({ 'page_items': chunks[0], 'num_pages': len(chunks), 'cur_page': 1, }) if len(extra_pages) > 1: self.meta['pagination']['next_page'] = extra_pages[0].meta return extra_pages
def paginate(self, templ_vars): extra_pages = [] logging.debug("called pagination for {0}".format(self.meta["slug"])) if "page_items" not in self.meta["pagination"]: logging.debug("doing pagination for {0}".format(self.meta["slug"])) # This is the first page of a set of pages. Set up the rest. Other # wise don't do anything. source_spec = self.meta["pagination"]["list"].split(".") logging.debug("pagination source is: " + repr(source_spec)) if source_spec[0] == "page": source = self.meta source_spec.pop(0) elif source_spec[0] == "site": source = templ_vars["site"] source_spec.pop(0) else: logging.error("Unknown pagination source! Not paginating") return for k in source_spec: source = source[k] sort_key = self.meta["pagination"].get("sort_key", None) sort_reverse = self.meta["pagination"].get("sort_reverse", False) logging.debug("sort_key: {0}, sort_reverse: {1}".format(sort_key, sort_reverse)) if not source: return extra_pages if isinstance(source[0], Page): source = [p.meta for p in source] if sort_key is not None: if isinstance(source[0], dict): source.sort(key=lambda x: x[sort_key], reverse=sort_reverse) else: source.sort(key=lambda x: x.__getattribute__(sort_key), reverse=sort_reverse) chunks = list(util.chunk(source, self.meta["pagination"]["limit"])) if not chunks: return extra_pages # Make a page for each chunk for idx, chunk in enumerate(chunks[1:], 2): new_meta = copy.deepcopy(self.meta) new_meta.update( { "url": self.url_pattern, "pagination": {"page_items": chunk, "num_pages": len(chunks), "cur_page": idx}, } ) new_page = self.from_meta(new_meta, self.options, self.engine, renderer=self.renderer) logging.debug("page {0} is {1}".format(idx, new_page)) if new_page: extra_pages.append(new_page) # Set up the next/previous page links for idx, page in enumerate(extra_pages): if idx == 0: page.meta["pagination"]["prev_page"] = self.meta else: page.meta["pagination"]["prev_page"] = extra_pages[idx - 1].meta if idx < len(extra_pages) - 1: page.meta["pagination"]["next_page"] = extra_pages[idx + 1].meta else: page.meta["pagination"]["next_page"] = None # Pagination date for this page self.meta["pagination"].update({"page_items": chunks[0], "num_pages": len(chunks), "cur_page": 1}) # Extra pages doesn't include the first page, so if there is at # least one, then make a link to the next page. if len(extra_pages) > 0: self.meta["pagination"]["next_page"] = extra_pages[0].meta return extra_pages