31 lines
1.0 KiB
Python
31 lines
1.0 KiB
Python
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('/<slug>/')
|
|
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 = 10
|
|
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('/<slug>/feed.atom')
|
|
def feed(slug):
|
|
return 'stub'
|