読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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