如何在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 /'子目录。

+0

非常感谢你! – technobot