Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

bottleとsqlite3を連携させて簡単なメモ表示ツール その3:テンプレートエンジンJadeを使う

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")

見え方

f:id:shuzo_kino:20160919214355p:plain