from flask import Blueprint, redirect, url_for, render_template, request, session, abort from ..models import Topics, Threads import math bp = Blueprint('topics', __name__, url_prefix = '/topics/') @bp.get('/') def all_topics(): topic_list = Topics.get_list() return render_template('topics/topics.html', topics=topic_list) @bp.get('//') def topic(slug): topic = Topics.find({'slug': slug}) if not topic: abort(404) sort_by = request.args.get('sort_by', default=session.get('sort_by', default='activity')) PER_PAGE = 3 threads_count = Threads.count({'topic_id': topic.id}) page_count = max(1, math.ceil(threads_count / PER_PAGE)) try: page = max(1, min(int(request.args.get('page', default=1)), page_count)) except ValueError: abort(404) return render_template('topics/topic.html', topic=topic, threads=topic.get_threads(PER_PAGE, page, sort_by), sort_by=sort_by, page=page, page_count=page_count) @bp.get('//feed.atom') def feed(slug): return 'stub'