fmartingr.com-legacy/fmartingrcom/apps/blog.py

56 lines
1.5 KiB
Python

# -*- coding: utf-8 -*-
from flask import Blueprint, render_template, request, abort, url_for
from sqlalchemy import Column, String, Text, Integer, Boolean, DateTime
from fmartingrcom import db, register_admin_model, conf
blog = Blueprint('blog', __name__)
# Models
class Post(db.Model):
__tablename__ = 'blog_post'
id = Column(Integer, primary_key=True)
title = Column(String(250))
slug = Column(String(250), index=True)
date = Column(DateTime(True), index=True)
content = Column(Text)
html = Column(Text)
draft = Column(Boolean, default=True)
@property
def absolute_url(self):
return url_for('blog.blog_post',
year=self.date.year,
month=str(self.date.month).zfill(2),
day=str(self.date.day).zfill(2),
slug=self.slug)
if conf.ENABLE_ADMIN:
register_admin_model(Post)
# Views
@blog.route('/blog/<int:year>/<string:month>/<string:day>/<slug>/')
def blog_post(year, month, day, slug):
item = Post.query.filter_by(slug=slug).first_or_404()
context = {
'item': item,
}
return render_template('blog/post.html', **context)
@blog.route('/blog/')
def blog_list():
try:
page_num = int(request.args.get('page', 1))
except ValueError:
page_num = 1
query = Post.query.order_by(Post.date)
paginator = query.paginate(page_num, 1)
context = {
'items': paginator.items,
'paginator': paginator
}
return render_template('blog/list.html', **context)