56 lines
1.5 KiB
Python
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)
|