publisher ハンドラは URI に指定されたモジュールを探して import します。 モジュールの位置は req.filename 属性で決まります。 ファイル拡張子がある場合、 import を行う前に無視します。
req.filename が空の場合、モジュール名はデフォルト値の"index"になります。 "index".
モジュールを import すると、URI の残りの部分からクエリデータ (いわゆる PATH_INFO) までの間の部分を使ってモジュール内のオブジェクトを探します。 publisher ハンドラは各要素をモジュール内のPython オブジェクトに対応づけ ながら、パスの要素を左から右にひとつづつトラバース(traverse) します。
URL に PATH_INFO がない場合、publisher ハンドラは"index"をデフォルト値に使います。パスの最後の要素がモジュール内のオブジェクト名で、 かつその前にある要素がディレクトリ名の場合 (モジュール名が指定されて いない場合)、モジュール名はデフォルト値の "index" になります。
以下のような場合にはトラバースを停止してHTTP_NOT_FOUND を返します:
パス上にオブジェクトが見つからなかった場合、クライアントに HTTP_NOT_FOUND を返します。
例えば、以下のような設定があるとしましょう:
DocumentRoot /some/dir <Directory /some/dir> SetHandler mod_python PythonHandler mod_python.publisher </Directory>
そして、以下のようなファイル/some/dir/index.py があったとします:
def index(req): return "We are in index()" def hello(req): return "We are in hello()"
URI と結果は次のようになります:
http://www.somehost/index/index は "We are in index()" になります。
http://www.somehost/index/ は "We are in index()"になります。
http://www.somehost/index/hello は "We are in hello()"になります。
http://www.somehost/hello は "We are in hello()"になります。
http://www.somehost/spam は "404 Not Found"になります。