def paginate_view(template, objlist, page=None, objlistname='objects', endpoint=None, view_args=None, per_page=50, extra_context=None, **kwargs): # legacy data = dict(kwargs) if 'count' in data: count = data.pop('count') else: count = len(objlist) if view_args is None: view_args = dict(request.view_args or {}) if page is None: page = view_args.pop('page') page_obj = Paginator(page, count, per_page=per_page) page_objlist = page_obj.slice(objlist) # page_objlist = objlist[0:2] if not page_objlist and page != 1: abort(404) data.update({ 'endpoint': endpoint or request.endpoint, 'view_args': view_args, 'page_obj': page_obj, }) if extra_context: data.update(extra_context(page_objlist, page_obj) or {}) data[objlistname] = page_objlist return render_template(template, **data)
def ajax_author_overview(user_id, page): author = Author.get(id=user_id) if not author: abort(404) comments_list = StoryComment.select(lambda x: x.author == author and not x.deleted and x.story_published) comments_list = comments_list.order_by(StoryComment.id.desc()) comments_count = comments_list.count() paged = Paginator( number=page, total=comments_count, per_page=current_app.config['COMMENTS_COUNT']['author_page'], ) # TODO: restore orphans? comments = paged.slice(comments_list) if not comments and page != 1: abort(404) data = { 'author': author, 'comments': comments, 'page_obj': paged, 'comments_short': True, } data.update(cached_lists([x.story.id for x in comments])) return jsonify({ 'success': True, 'link': url_for('author.info', user_id=author.id, comments_page=page), 'comments_count': comments_count, 'comments_list': render_template('includes/story_comments_list.html', **data), 'pagination': render_template('includes/comments_pagination_author_overview.html', **data), })
def ajax_author_dashboard(page): if not current_user.is_authenticated: abort(403) comments_list = StoryComment.bl.select_by_story_author(current_user) comments_list = comments_list.order_by(StoryComment.id.desc()) comments_count = comments_list.count() paged = Paginator( number=page, total=comments_count, per_page=current_app.config['COMMENTS_COUNT']['author_page'], ) # TODO: restore orphans? comments = paged.slice(comments_list) if not comments and page != 1: abort(404) data = { 'comments': comments, 'page_obj': paged, 'comments_short': True, } data.update(cached_lists([x.story.id for x in comments])) return jsonify({ 'success': True, 'link': url_for('author.info', comments_page=page), 'comments_count': comments_count, 'comments_list': render_template('includes/story_comments_list.html', **data), 'pagination': render_template('includes/comments_pagination_author_dashboard.html', **data), })
def info(user_id=None, comments_page=1): if user_id is not None: try: user_id = int(user_id) except ValueError: abort(404) data = {} if user_id is None: if not current_user.is_authenticated: abort(403) author = current_user._get_current_object() comments_list = StoryComment.bl.select_by_story_author(author) comments_list = comments_list.order_by(StoryComment.id.desc()) stories = list(author.stories) stories.sort(key=lambda x: x.first_published_at or x.date, reverse=True) contributing_stories = list(author.contributing_stories) contributing_stories.sort(key=lambda x: x.first_published_at or x.date, reverse=True) data['all_views'] = Story.bl.get_all_views_for_author(author) data['page_title'] = gettext('My cabinet') template = 'author_dashboard.html' else: author = Author.get(id=user_id) if not author: abort(404) author_id = author.id # обход утечки памяти comments_list = StoryComment.select(lambda x: x.author.id == author_id and not x.deleted and x.story_published) comments_list = comments_list.order_by(StoryComment.id.desc()) data['page_title'] = gettext('Author: {author}').format(author=author.username) stories = list(Story.bl.select_by_author(author, for_user=current_user)) stories.sort(key=lambda x: x.first_published_at or x.date, reverse=True) contributing_stories = None template = 'author_overview.html' comments_count = comments_list.count() series = list(author.series) paged = Paginator( number=comments_page, total=comments_count, per_page=current_app.config['COMMENTS_COUNT']['author_page'], page_arg_name='comments_page', ) # TODO: restore orphans? comments = paged.slice(comments_list) if not comments and comments_page != 1: abort(404) data.update({ 'author': author, 'is_system_user': author.id == current_app.config['SYSTEM_USER_ID'], 'sub': author.bl.get_stories_subscription(current_user._get_current_object()), 'stories': stories, 'contributing_stories': contributing_stories, 'series': series, 'comments': comments, 'comments_count': comments_count, 'comments_short': True, 'page_obj': paged, }) story_ids = set(x.id for x in stories) if contributing_stories: story_ids |= set(x.id for x in contributing_stories) story_ids |= set(x.story.id for x in comments) data.update(cached_lists(story_ids)) return render_template(template, **data)
def info(user_id=None, comments_page=1): if user_id is not None: try: user_id = int(user_id) except ValueError: abort(404) data = {} if user_id is None: if not current_user.is_authenticated: abort(403) author = current_user._get_current_object() comments_list = StoryComment.bl.select_by_story_author(author) comments_list = comments_list.order_by(StoryComment.id.desc()) stories = list(author.stories) stories.sort(key=lambda x: x.first_published_at or x.date, reverse=True) contributing_stories = list(author.contributing_stories) contributing_stories.sort(key=lambda x: x.first_published_at or x.date, reverse=True) data['all_views'] = Story.bl.get_all_views_for_author(author) data['page_title'] = gettext('My cabinet') template = 'author_dashboard.html' else: author = Author.get(id=user_id) if not author: abort(404) author_id = author.id # обход утечки памяти comments_list = StoryComment.select( lambda x: x.author.id == author_id and not x.deleted and x. story_published) comments_list = comments_list.order_by(StoryComment.id.desc()) data['page_title'] = gettext('Author: {author}').format( author=author.username) stories = list(Story.bl.select_by_author(author, for_user=current_user)) stories.sort(key=lambda x: x.first_published_at or x.date, reverse=True) contributing_stories = None template = 'author_overview.html' comments_count = comments_list.count() series = list(author.series) paged = Paginator( number=comments_page, total=comments_count, per_page=current_app.config['COMMENTS_COUNT']['author_page'], page_arg_name='comments_page', ) # TODO: restore orphans? comments = paged.slice(comments_list) if not comments and comments_page != 1: abort(404) data.update({ 'author': author, 'is_system_user': author.id == current_app.config['SYSTEM_USER_ID'], 'sub': author.bl.get_stories_subscription(current_user._get_current_object()), 'stories': stories, 'contributing_stories': contributing_stories, 'series': series, 'comments': comments, 'comments_count': comments_count, 'comments_short': True, 'page_obj': paged, }) story_ids = set(x.id for x in stories) if contributing_stories: story_ids |= set(x.id for x in contributing_stories) story_ids |= set(x.story.id for x in comments) data.update(cached_lists(story_ids)) return render_template(template, **data)