如何在web.py中更改默认文件夹“static”
问题描述:
我的项目需要一个包含CSS文件的文件夹,该文件夹位于名为“themes”的应用程序根目录中。 web.py默认情况下,使用文件夹“静态”返回静态文件,只是重新命名她......没有一个我在网上找到的解决方案是在网址如下如何在web.py中更改默认文件夹“static”
有必要添加行
'/(?:img|js|css)/.*', 'app.controllers.public.public',
在app.controllers.public
需要NEX代码
class public:
def GET(self):
public_dir = 'themes'
try:
file_name = web.ctx.path.split('/')[-1]
web.header('Content-type', mime_type(file_name))
return open(public_dir + web.ctx.path, 'rb').read()
except IOError:
raise web.notfound()
def mime_type(filename):
return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
但这种解决方案并不活像k和文件仍然是从静态拾取的...
是否有一个简单明了的解决方案?也许我们应该改变web.py文件夹的名称?
答
有没有简单的方法来改变web.py的使用/static/
,但有一个非常简单的方法来添加自己的一个,而无需任何添加到您的urls
名单。
看看web.py的代码,你会发现web.httpserver.StaticMiddleware
是定义它的地方。你的工作,用新的前缀创建另一个WSGI中间件。然后,因为这是WSGI中间件,请将您的新类添加到运行链中。
from web.httpserver import StaticMiddleware
if __name__ == '__main__':
app = web.application(urls, globals())
app.run(lambda app: StaticMiddleware(app, '/themes/')
如果这对你来说太简洁,认为它是一样明确地创建一个新的子类,并传递一个子类app.run()
:
from web.httpserver import StaticMiddleware
class MyStaticMiddleware(StaticMiddleware):
def __init__(self, app, prefix='/themes/'):
StaticMiddleware.__init__(self, app, prefix)
if __name__ == '__main__':
app = web.application(urls, globals())
app.run(MyStaticMiddleware)
注意“/静态/”仍然可以工作,从/ static /子目录中加载文件:您所做的所有事情都会添加另一个处理器,但它执行相同的操作,但来自'/ themes /'子目录。
非常感谢你! – technobot