如何更改 web.py 中的默认文件夹 "static"
How to change the default folder "static" in web.py
我的项目中的一个库需要一个包含 CSS 文件的文件夹,这些文件位于应用程序根目录中,名为 "themes"。 web.py 默认情况下,使用文件夹 "static" 到 return 静态文件并重命名她...不是我在网上找到的解决方案之一如下
在网址中需要添加行
'/(?:img|js|css)/.*', 'app.controllers.public.public',
在app.controllers.public
需要下一个代码
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'
但是这个解决方案不起作用,文件仍然是从静态中提取的...
有没有简单明了的解决方法?也许我们应该更改 web.py?
中文件夹的名称
没有简单的方法可以更改 web.py 对 /static/
的使用,但是有一种非常简单的方法可以添加您自己的使用,而无需在您的列表中添加任何内容urls
.
看看web.py的代码,你会发现web.httpserver.StaticMiddleware
就是定义this的地方。你的工作是创建另一个带有新前缀的 WSGI 中间件。然后,因为这是 WSGI 中间件,将新的 class 添加到 运行 链。
from web.httpserver import StaticMiddleware
if __name__ == '__main__':
app = web.application(urls, globals())
app.run(lambda app: StaticMiddleware(app, '/themes/')
如果这对你来说太简洁了,请考虑它与显式创建一个新的子class并将该子class传递给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/”仍然有效,从 /static/ 子目录加载文件:您所做的只是添加了 另一个 处理器,它做同样的事情, 但来自 '/themes/' 子目录。
我的项目中的一个库需要一个包含 CSS 文件的文件夹,这些文件位于应用程序根目录中,名为 "themes"。 web.py 默认情况下,使用文件夹 "static" 到 return 静态文件并重命名她...不是我在网上找到的解决方案之一如下
在网址中需要添加行
'/(?:img|js|css)/.*', 'app.controllers.public.public',
在app.controllers.public
需要下一个代码
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'
但是这个解决方案不起作用,文件仍然是从静态中提取的...
有没有简单明了的解决方法?也许我们应该更改 web.py?
中文件夹的名称没有简单的方法可以更改 web.py 对 /static/
的使用,但是有一种非常简单的方法可以添加您自己的使用,而无需在您的列表中添加任何内容urls
.
看看web.py的代码,你会发现web.httpserver.StaticMiddleware
就是定义this的地方。你的工作是创建另一个带有新前缀的 WSGI 中间件。然后,因为这是 WSGI 中间件,将新的 class 添加到 运行 链。
from web.httpserver import StaticMiddleware
if __name__ == '__main__':
app = web.application(urls, globals())
app.run(lambda app: StaticMiddleware(app, '/themes/')
如果这对你来说太简洁了,请考虑它与显式创建一个新的子class并将该子class传递给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/”仍然有效,从 /static/ 子目录加载文件:您所做的只是添加了 另一个 处理器,它做同样的事情, 但来自 '/themes/' 子目录。