Google App Engine (Python) のdjangoのテンプレートを使っていてちょっと躓いたことがあった。
私は、 http://www.aaharu.com/ というサイトを持っていますが、これはGAEで作っていて、DNSもGoogle Appsで設定しています。
お金がかかっているのはドメインだけ。
以前まではテンプレートを使わないでHTMLを表示していたわけですが、更新のたびにすべてのHTMLを変更するのが面倒になったので、テンプレートを使ってみることにしました。
GAEには標準でDjangoのテンプレートエンジンが入っていて、テンプレート継承の仕組みがあります。
http://djangoproject.jp/doc/ja/1.0/topics/templates.html
http://d.hatena.ne.jp/griefworker/20091028/gae_inherit_template
それで、テンプレート継承を使ってみたわけなのですが、HTMLの表示がくずれる現象が起きました。
HTMLのソースを表示させても問題は見当たらない。そしてなぜかOperaだけは正しく表示してくれる。
Chromeの『要素を検証』で確認してみると、どうやらbase.htmlの内容の前に空文字が挿入されているようだったので原因をいろいろ調べると、原因はUTF-8のBOMだった。
base.htmlがBOMありのUTF-8だったため、先頭の1文字を変な風に解釈していたようです。
というわけで、PythonでUTF-8扱うときはBOMは消そうと思いました。
2011年8月10日水曜日
2010年11月20日土曜日
ドリームキャスト起動画面のジェネレータ作ってみた
ドリキャスの起動画面をFlashで再現してみた。
DC startup generator
生成されたURL(http://www.aaharu.com/dcdata/DC.swf?w=eJzzSM3JyddRCM8vyklRBAAfngRqなど)に飛べば、その文字列をいつでも再現できます。
Flashのソースコードも公開してあります。
Python(GAE)のコードの一部がこれ。
GETでswfに文字列を渡しているのですが、流れとしては
HTMLのformで文字列をPOSTで送信→Pythonでzlib(gzip)圧縮→PythonでBase64エンコード→GETで渡す→swfでGET受信→ActionScriptでBase64をByteArrayにデコード→ByteArrayを解凍→文字列に挿入
て感じです。ちょっと違う?
DC startup generator
生成されたURL(http://www.aaharu.com/dcdata/DC.swf?w=eJzzSM3JyddRCM8vyklRBAAfngRqなど)に飛べば、その文字列をいつでも再現できます。
Flashのソースコードも公開してあります。
Python(GAE)のコードの一部がこれ。
class GenerateHandler(webapp.RequestHandler):
def post(self):
form = self.request.get('words')
if len(form) < 2:
path = os.path.join(os.path.dirname(__file__), 'index.html')
self.response.out.write(template.render(path, {'alert': "2文字未満は未対応です・・・"}))
else:
form = zlib.compress(form.encode('utf_8'))
form = b64encode(form)
self.redirect("../dcdata/DC.swf?w="+form)
GETでswfに文字列を渡しているのですが、流れとしては
HTMLのformで文字列をPOSTで送信→Pythonでzlib(gzip)圧縮→PythonでBase64エンコード→GETで渡す→swfでGET受信→ActionScriptでBase64をByteArrayにデコード→ByteArrayを解凍→文字列に挿入
て感じです。ちょっと違う?
登録:
投稿 (Atom)