ブログトップ 記事一覧 ログイン 無料ブログ開設

kinneko@転職先募集中の日記

検索エンジンから来た方へ: 申し訳ないですが、日記なので日々積み重なっています。
目的の情報にたどり着くには、右の検索窓から日記内を再検索してください。
北陸エリア内(もしくはエリア外でも)で転職先を探しています。
(マジです。ネタではありません。ホントですって...)
詳細履歴書をご希望の方はメールでご連絡下さいませ。(kinneko at gmail.com)

2006-04-18

[][] web.py で favicon を出す

web.pyを使ってテストをしていると、ログに

"GET /favicon.ico HTTP/1.1" 404 -

と表示されてうざい。

最近のブラウザは無条件にトップディレクトリ下に favicon を探しに来るけど、そんなコンテンツは知らない web.py は「知らんよ」と返すしかない。

web.py では、デフォルトで ./static に静的コンテンツを置いて参照できるようになっているが、こんどはブラウザ側はそんなことは知らない。

他の人の書いたサンプルなどを見ると、webサーバーの rewrite roule で見えるようにしているようだ。favicon の送り出しが web.py を経由しない分、処理は軽くなるので、この方法はかしこい。

でも、単体サーバーで起動してテストしている時には、この方法は使えない。あとは、コンテンツ側で ico ファイルを javascript 指定してやる手があるけど、これも1つづつ指定するのはめんどくさい。

というわけで、直接見えるようにする方法を考えてみた。

import web

urls = (
    '/favicon.ico', 'favicon'
)

class favicon:
   def GET(self):
       import os, stat
       if os.path.isfile('./static/favicon.ico'):
           st = os.stat('./static/favicon.ico')
           web.header('Content-Length', str(st.st_size))
           web.header('Content-Type', 'image/x-icon')
           web.ctx.output = open('./static/favicon.ico', 'rb')
       else:
           return web.notfound()

if __name__ == "__main__": web.run(urls)

最初は、そのままバイナリを返してもブラウザ側でよろしくやってくれるだろうと思ったが、ヘッダをちゃんと返さないと、FireFox はキャッシュしてくれず、毎回取りに来るようだ。それもウザイのでマジメに返答してみる。

たぶんこんなんでいいと思うのだけど、間違いorもっといい方法があるのだった教えてね。>all

# 脳が膿んでいるので、今日できるのはこのくらいが限界なのさ... まぁ、膿んでなくても似たりよったりだけどね...

YaoYao 2009/09/27 16:14 Web pageに下記の内容を追加すれば、staticフォルダーから探します。<link rel="icon" type="image/x-icon" href="/static/favicon.ico" />

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kinneko/20060418/p7