あなたが同じパスに別のディレクトリを持っている必要がある場合、あなたはweb.httpserver.StaticMiddlewareをサブクラス化したり(PATH_INFOを変更することによって、そのトリックStaticApp)このような独自のミドルウェアを書くことがあります。
import web
import os
import urllib
import posixpath
urls = ("/.*", "hello")
app = web.application(urls, globals())
class hello:
def GET(self):
return 'Hello, world!'
class StaticMiddleware:
"""WSGI middleware for serving static files."""
def __init__(self, app, prefix='/static/', root_path='/foo/bar/'):
self.app = app
self.prefix = prefix
self.root_path = root_path
def __call__(self, environ, start_response):
path = environ.get('PATH_INFO', '')
path = self.normpath(path)
if path.startswith(self.prefix):
environ["PATH_INFO"] = os.path.join(self.root_path, web.lstrips(path, self.prefix))
return web.httpserver.StaticApp(environ, start_response)
else:
return self.app(environ, start_response)
def normpath(self, path):
path2 = posixpath.normpath(urllib.unquote(path))
if path.endswith("/"):
path2 += "/"
return path2
if __name__ == "__main__":
wsgifunc = app.wsgifunc()
wsgifunc = StaticMiddleware(wsgifunc)
wsgifunc = web.httpserver.LogMiddleware(wsgifunc)
server = web.httpserver.WSGIServer(("0.0.0.0", 8080), wsgifunc)
print "http://%s:%d/" % ("0.0.0.0", 8080)
try:
server.start()
except KeyboardInterrupt:
server.stop()
それとも、 "静的"という名前のシンボリックリンクを作成し、それを別のディレクトリに向けることができます。
ありがとうございます! 'AttributeError: 'module'オブジェクトに 'StaticMiddleware''Adaptive属性がありません。 –
' print web .__ version__'の出力は何ですか?これはPython 2.6.1とweb.py 0.36で動作します。 –
ああ、私は0.32です。私は0.36にアップグレードし、それは動作しますが、私が必要とするものは100%ではありません。私は静的//foo /静的/にマップする必要があります。助けてくれてありがとう! –