bottleにはデフォでerbっぽいテンプレートエンジンが搭載されています。
……とはいえ、今更タグ閉じなんてカッたるい事をやる気にもなりません。
ここは一つ先人の叡智をお借りして、jadeをbottleで使ってしまいましょう
実際のところ
導入
まずは導入。
jadeの環境がある状態で、以下のコマンドを実行。
最終更新が2年前というのが若干きになりますが……。
$ pip install bottle-jade
python部分
冒頭部分
諸々のライブラリまわり。
今までのモノに加えて、Bottle本体とbottle_jadeを呼び出し。
URLの指定を楽にするため標準搭載のosライブラリも。
from bottle import get, post, request, run, redirect, Bottle from time import strftime import sqlite3 from bottle_jade import JadePlugin from os import path as op conn = sqlite3.connect('blogtest.sqlite') app = Bottle() templates = op.dirname(op.abspath(__file__)) + '/templates/' jade = app.install(JadePlugin(template_folder=templates))
本体
で、本体。
GetとPostのときに弄ったBlogまわり
BASE_QUERY_FOR_BODY = 'select body from blog ' @get('/blog') def recentBlogPost(): query = BASE_QUERY_FOR_BODY + 'order by rowid desc limit 1;' cur = conn.cursor() for row in cur.execute(query): body = row context = {"body": body} return jade.render('blog.jade', **context) @get('/blog/<num>') def someBlogPost(num): query = BASE_QUERY_FOR_BODY + 'where rowid=' + str(num) cur = conn.cursor() for row in cur.execute(query): body = row context = {"body": body} return jade.render('blog.jade', **context) @post('/blog') @post('/blog/<num>') def postBlog(): body = request.forms.get('body') query = 'INSERT INTO blog VALUES ("' + body +'",date("now"))' conn.execute(query) return redirect('/blog')
jade部
blog.jade
h1 blog posts p #{body[0]} hr form(action="/blog" method="post") b please input blog contents. >> input(name="body" type="text") input(value="Post" type="submit")
見え方