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('/') 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/') def photo(id): return send_from_directory('photos', '{}.jpg'.format(id)) @app.route('/thumbnail/') def thumbnail(id): return send_from_directory('photos/thumbs', '{}.jpg'.format(id)) @app.route('/slide/') 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/', 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), ''.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/') 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/') 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'])