आप तो आप (PATH_INFO संशोधित करके यह चाल StaticApp) web.httpserver.StaticMiddleware उपवर्ग या इस तरह अपने खुद के मिडलवेयर लिख सकते हैं एक ही पथ के लिए अलग निर्देशिका की आवश्यकता है:
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()
या आप "स्थैतिक" नामक सिम्लिंक बना सकते हैं और इसे दूसरी निर्देशिका में इंगित कर सकते हैं।
स्रोत
2011-08-05 19:29:12
धन्यवाद! मुझे मिलता है: 'विशेषता त्रुटि:' मॉड्यूल 'ऑब्जेक्ट में कोई विशेषता नहीं है' स्टेटिक मिडलवेयर ' –
' प्रिंट वेब .__ संस्करण__' का आउटपुट क्या है? यह पायथन 2.6.1 और वेब.py 0.36 के साथ काम करता है। –
आह, मैं 0.32 पर हूं। मैंने 0.36 तक अपग्रेड किया और यह काम करता है, लेकिन मुझे 100% की आवश्यकता नहीं है। मुझे नक्शा/स्थैतिक/टू/foo/static/करने की आवश्यकता है। सहायता के लिए धन्यवाद! –