makoでutf-8を埋め込みたいとき

先頭行にcoding: utf-8と書いておけばいい。

そうしないとこんなエラーが出る。

CompileException: Could not read template using encoding of 'ascii'. Did you forget a magic encoding comment? in file

最初わからなかったけれど、あーそういうことねというメッセージだった。

pylonsのroutes.py

pylonsのRoutesがドキュメントみてもいまいちわからんとか思ってたんだけど、RoRのドキュメント読んだらさっくりと理解できそうな気がしてきたところで、routing.pyをいろいろいじってみたらなんとなく理解した感じ。

pylonsにはpaster shell

pylonsで対話的にモデルを操作したい場合にはdevelopment.iniのあるディレクトリで

paster shell

とすればよいらしい。modelっていう変数に色々入っているので

session = model.Session
mol = model.Mol
for m in session.query(mol).filter(mol.MW > 199):
    print m

などとやるべしナ感じ。

pylonsはモデルだけいじりたいときにはどうすんの?

TurboGearsだとこんな感じでいけるじゃないですか?

pylonsはちょっとよく分からなくて結局

sqlite3 -separator , test.db ".import makeinu.csv test_table"

とやってしまった(なんじゃそりゃ)。

Elixirをさわってみた

SQLAlchemyにかぶせてActiveRecordとして扱えるらしいElixirを試してみた。チュートリアルを一通り。

面白かったのは継承っぽくかけるとこ。こんな感じでかける。

from elixir import *

metadata.bind = "sqlite:///test.db"
#metadata.bind.echo = True

class Artist(Entity):
    using_options(inheritance='multi')
    name = Field(Unicode(60))

    def __repr__(self):
        return '<Artist "%s">' % self.name

class Technoartist(Artist):
    using_options(inheritance='multi')

    def __repr__(self):
        return '<TechnoArtist "%s">' % self.name

class Houseartist(Artist):
    using_options(inheritance='multi')

    def __repr__(self):
        return '<HouseArtist "%s">' % self.name

class Dnbartist(Artist):
    using_options(inheritance='multi')

    def __repr__(self):
        return '<Drum\'n\'BassArtist "%s">' % self.name

if __name__ == "__main__":
    from model import *
    setup_all()
    create_all()

    technasia = Technoartist(name=u"Technasia")
    louievega = Houseartist(name=u"Louie Vega")
    joeclaussell = Houseartist(name=u"Joe Claussell")
    nutone = Dnbartist(name=u"Nu Tone")
    omnitrio = Dnbartist(name=u"OmniTrio")

    session.flush()

    print "Artist.query.all()"
    print Artist.query.all()
    print "\nDnbartist.query.all()"
    print Dnbartist.query.all()

Artistを探すと、サブクラスにあたるTechnoArtist,HouseArtist,Drum'n'BassArtistが探索される

Artist.query.all()
[<TechnoArtist "Technasia">, <HouseArtist "Louie Vega">, 
<HouseArtist "Joe Claus sell">, <Drum'n'BassArtist "Nu Tone">, 
<Drum'n'BassArtist "OmniTrio">]

Dnbartist.query.all()
[<Drum'n'BassArtist "Nu Tone">, <Drum'n'BassArtist "OmniTrio">]

チュートリアルによると、この先はSQLAlchemyのドキュメント読むのがいいんじゃねーかなと書いてあったので、読んでみる。

あと、このチュートリアルだけだとusing_optionsとかが分からないのでAPI Referenceも読むべしな感じ。

pylonsでQuickWIki

またwikiかよ、、、と敬遠しがちなWikiを作ろうチュートリアルだけど、フレームワーク自体はじめてのヒト向けには素直に書かないといけないし、幾つかのフレームワークを渡り歩いたヒトにも新たな発見とか他のフレームワークとの違いを見せるようなサンプルにしないといけないので、意外と構成を考えるのが難しいですな。

そういった意味ではpylonsでwikiを作ろうチュートリアルはdeleteの実装がajaxでのドラッグドロップになってて、しかも簡単に実装できる!っていう喜びが得られてナイスな感じ。

  • modelまわり
  • 他のパッケージの依存や自動インストールのやり方
  • ルーティングの方法
  • Ajax関連

ルーティング周りをちょっとよく理解していないのと、Ajaxがあっさり書けすぎてて何をやっているのかわからなかったので、あとでpylonsでなんか作ってみよう。

pylonsはじめました

pylonsはじめました。なかなか面白そうです。

とりあえず、getting startedflickr search tutorialはやってみた。

catalystとかJiftyとかturbogearsとか(RoRもそうだっけか?)はとりあえずプロジェクトを用意して何も考えずサーバー起動してアクセスすると小洒落た画面がでてきて、おー!ってちょっとした感動を覚えたりするんだけどpylonsの場合はそういうのなしの方向で。

ただ、エラー吐かすとなんかすごいよ。エラーから入らせるとは、、、テストファースト?

QuickWiki Tutorialに続く、、、