サイトのトップページもそれっぽく見えるようになってきて、気を良くしていました。で、ローカルでいろいろテストしたり、このサイトがうまく動いているか、確認したりしていました。ページドリストを作るpaginateですが、なんだかうまく動いていていない事が判明。
まだ、原因をちゃんとみていないのですが、ちょっといろいろありました。macとlinuxで挙動が違ったり・・・。ちなみにWindowsでは開発しないので知りません。
さて、いろいろある問題ですが、まず、簡単なところから。paginateを使うとき
@paginate("resutls")
def fetch(self, arg1):
return dict(results=MyModel.select())
という感じで使うとドキュメントにあります。paginateの中でcgiパラメータを処理していると信じていたら、どうやらそうではないらしい。ここでは、fetchメソッドのキーワード引数を処理しているらしい。キーワード引数をとらないので、paged listにしたときのcgiパラメータが全く処理されないので、Paged Listは出るけれども最初のページしか表示されません。なのでdef fetch(self, arg1, **kwd)としないと動いてくれません。**kwdを追加すればいいだけなので、それほど困った事にはなりません。
次にその影響と言うか、arg1があってもなくても処理されるようにしたいので、def fetch(self, arg1=None, **kwds)とします。urlとしては、分かりやすく書けばhttp://localhost/fetch/1みたいな感じですね。子の場合、paginateでキーワード引数を処理すると書きましたが、そのせいで、2ページ目のURLはhttp://localhost/fetch/1?args1=1&...のようになってしまい、args1は文字列じゃなくリストがわたってくるようになります。結局def fetch(self, *args, **kwds)のようになりますた。
上の二つはちょっと前までは動いていたような気がして、1.0.1にしてから動かなくなったような気がするのですが、定かではないです。
さて、次の問題がargs1に日本語が入る場合です。URL的にはutf-8でescapeされたものがリクエストされてくるのですが、コントローラにわたってくるときにはunescapeされたutf-8の文字列です。これは自分でunicodeにしてあげればいいのですが、turbogears.urlでurlを作るときに、utf-8の文字列がunicodeにしようと頑張ってくれています。でもー、勝手にunicodeに変換しようとしてもそれは無理でしょう。escapeしていないとunicodeになっても困ります。この辺はもうちょっと調べて直すかも。でも、自分でescapeしてから渡せばいいので、その辺は仕様なのかな?
最後がちょっと困った問題。macだと大丈夫なんですが、linuxだと動かない、と言うもの。developementかproductionかの違いかもしれません。Paged Listの最後のページのURLにアクセスする場合、tg.paginate.href_lastとかになるのですが、macだとちゃんと設定されているのですが、linuxだとこれが最初のページになっています。これはどうしよう?ページ数などは正しく取得できるので、tg.pagenate.get_page()で最後のページとかを取得すれば回避できるのですが、気持ち悪いです
とか、いろいろ。
それから、このサイトにトラックバックが最近ないのは、フィルタがはじいてくれているのか、バグですべてはじいているのか?まあ、気にならないのでいいのですが。それと、pingサーバにちゃんと送信しているかはさらに謎。トラックバックは一応、ローカルでテストしていますが、pingは一度もテストしていない。最近はあまりpingサーバの意義(スパムを送信するための送信先データの収集以外)を感じないし。