2008-03-29

TekTekをオープンしました

TekTek

書評が気になってしょうがない人のための書籍情報閲覧サービスTekTekをオープンしました。

こういう全日本&全世界公開型のサービスを作るのは経験不足ですが、まだいろいろ改善していきたいと思います。




ちなみにPythonとdjangoで作っています。

2008-03-12

djangoのi18nのset_languageリダイレクトビュー

またしても国際化ではまった。

djangoの国際化機能で用意されている、言語選択のビューset_languageは、公式ドキュメントではPOSTで渡すことになっているようだが、これはおそらく開発版での話で、今自分が使っている0.97preの段階ではGETで渡さないといけないようだ。
djangoの開発とその文書への反映速度の速さはすばらしいと思う。

2008-03-02

djangoの国際化アプリをOSXで作る時にはまる事。

OSXでdjangoの国際化アプリを作る場合、メッセージファイルの作成make-messages.pyでこける。
これはgettextのバージョンが古いから。最新のgettextを入れるとなおる。
gettextのインストールは、これに従った。

2008-03-01

djangoのgeneric viewsのobject_listでPythonの普通のlistを表示する

(以下、あまり詳しく既存の情報を調べず、手元のdjangoのコードを読んで適当に作ったもの。。)

djangoのgenericviewsのobject_listは便利だが、デフォルトではmodelのレコードしか表示できない。
一般のリストの中身などを表示する場合は、リストオブジェクトを適切にラップしてあげる必要がある。
そういう状況はマッシュアップサイトなどを作っていると、model以外からアイテムリストを取得したりするので、よくありますね。

以下、そのサンプル。
※get()メソッドでの例外の投げ方はあまり詳しく調べてないので、いい加減です。エラーが出るかも。
※まだpagenationさせて動かしていないので、その辺はこれからテストします。

from django.views.generic.list_detail import object_list
from django.core.exceptions import ObjectDoesNotExist

def list2genericviews(lst):
class GenList(list):
model = "GenList"
DoesNotExist = ObjectDoesNotExist
def __init__(self, lst):
self.extend([{"id": i, "value": x} for i, x in enumerate(lst)])
def _clone(self):
return self
def filter(self, pk=None):
return self[pk]
def count(self):
return len(self)
def get(self):
if len(self) == 0:
raise self.DoesNotExist("No item found in GenList")
if len(self) > 1:
raise AssertionError("There are multiple items in GenList")
return self[0]
return GenList(lst)

def show_list(request):
items = ["apple", "banana", "orange"]

#引数template_nameは必須です。
return object_list(request, queryset=list2genericviews(items), template_name="itemlist.html")

テンプレートitemlist.htmlはこんな感じ。
{% if object_list %}
<ul>
{% for item in object_list %}
<li>{{ item.value }}</li>
{% endfor %}
</ul>
{% endif %}

2008-02-04

Macのある生活 (現実)

Macのある生活

こんなにオシャレなMacもしがない三十路独身男性の手にかかると、、、、



最初はもっと引いて撮ってましたが、あまりにもMacがかわいそうな部屋なので容赦してこの範囲だけ撮影。

2008-01-29

mod_pythonでLD_LIBRARY_PATHの設定

http://www.troches.jp/content/view/131/66/

mod_pythonの設定をapacheのhttpd.confに書くときに、SetEnvでLD_LIBRARY_PATHなどを設定しても効き目がないそうだ。

/etc/init.d/httpd にexport LD_LIBRARY_PATH = ... と書くとよいとのこと。

ハイフンっぽい文字を一括で半角マイナスに変換

元ネタはこちら。 http://d.hatena.ne.jp/koseki2/20070927/unicodehyphen

hihuns = (u"\u002d", u"\u2212", u"\uff0d", u"\u30fc", 
u"\u2012", u"\u2013", u"\u2014", u"\u2015", u"\u2500")
def to_han_hihun(s):
for x in hihuns:
s = s.replace(x, u"-")
return s