89 lines
3.0 KiB
Python
89 lines
3.0 KiB
Python
from flask import render_template, send_from_directory, redirect, url_for, request, render_template_string
|
|
from . import app, db
|
|
from .models import Page, Photo
|
|
from .forms import PageForm
|
|
|
|
|
|
@app.route('/')
|
|
@app.route('/<path:permalink>')
|
|
def page(permalink=""):
|
|
permalink = permalink.strip("/")
|
|
print("asked for:" + permalink)
|
|
|
|
page = Page.query.filter_by(permalink=permalink).first_or_404()
|
|
|
|
return render_template("page.html", page = page)
|
|
|
|
@app.route('/photo/<id>')
|
|
def photo(id):
|
|
return send_from_directory('photos', '{}.jpg'.format(id))
|
|
@app.route('/thumbnail/<id>')
|
|
def thumbnail(id):
|
|
return send_from_directory('photos/thumbs', '{}.jpg'.format(id))
|
|
@app.route('/slide/<id>')
|
|
def slide(id):
|
|
return send_from_directory('photos/slides', '{}.jpg'.format(id))
|
|
|
|
@app.route('/favicon.ico')
|
|
def favicon():
|
|
return send_from_directory('static', 'favicon.ico')
|
|
|
|
|
|
@app.route('/admin')
|
|
def admin():
|
|
pages = [Page.query.first()]
|
|
photos = Photo.query.all()
|
|
return render_template("admin.html", pages=pages, photos=photos)
|
|
|
|
@app.route('/admin/page/<id>', methods=['GET', 'POST'])
|
|
def admin_page(id):
|
|
page = Page.query.filter_by(id=id).first_or_404()
|
|
form = PageForm()
|
|
photos = Photo.query.all()
|
|
form.photos.choices = [('{}'.format(p.id), '<img src="/thumbnail/{}">'.format(p.id)) for p in photos]
|
|
form.thumbnail.choices = [('{}'.format(p.id), p.alt) for p in photos]
|
|
|
|
if form.validate_on_submit():
|
|
page.name = form.name.data
|
|
page.title = form.title.data
|
|
page.description = form.description.data
|
|
page.endpoint = form.endpoint.data
|
|
page.thumbnail = Photo.query.filter_by(id=form.thumbnail.data).first()
|
|
page.photos = [Photo.query.filter_by(id=int(p)).first() for p in form.photos.data]
|
|
|
|
db.session.add(page)
|
|
db.session.commit()
|
|
return redirect(url_for('admin'))
|
|
|
|
else:
|
|
form.name.data = page.name
|
|
form.title.data = page.title
|
|
form.description.data = page.description
|
|
form.endpoint.data = page.endpoint
|
|
print(page.thumbnail)
|
|
form.thumbnail.data = str(page.thumbnail.id) if page.thumbnail else '1'
|
|
form.photos.data = [str(p.id) for p in page.photos]
|
|
return render_template('admin_page.html', page=page, form=form)
|
|
|
|
@app.route('/admin/newpage/<parent>')
|
|
def admin_newpage(parent):
|
|
parent = Page.query.filter_by(id=parent).first_or_404()
|
|
new = Page(name="child_{}".format(len(parent.children)+1), title="Ny sida", endpoint=True, parent=parent, parent_id=parent.id)
|
|
|
|
db.session.add(new)
|
|
|
|
db.session.commit()
|
|
return redirect(url_for('admin'))
|
|
|
|
@app.route('/admin/delpage/<id>')
|
|
def admin_delpage(id):
|
|
page = Page.query.filter_by(id=id).first_or_404()
|
|
root = Page.query.filter_by(id=1).first()
|
|
db.session.delete(page)
|
|
db.session.commit()
|
|
return redirect(url_for('admin'))
|
|
|
|
@app.route('/admin/markdown', methods=['POST'])
|
|
def markdown():
|
|
return render_template_string('{{ md | markdown }}', md=request.form['md'])
|