2017-04-18 5 views
0

私のプロジェクトでは、アプリケーションルートにあったCSSファイルを含むフォルダが「テーマ」と呼ばれるライブラリが必要です。デフォルトではweb.py、静的ファイルを返すと、ちょうど彼女の名前を変更する「静的」フォルダを使用しています...ない私はオンラインを見つけた解決策の一つは、ラインweb.pyのデフォルトフォルダ「静的」を変更するには

を追加する必要があるURLで、次の

ましたapp.controllers.public

'/(?:img|js|css)/.*', 'app.controllers.public.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' 

を必要とするが、この解決策はWORありませんkとファイルはまだ静的からピックアップされています...

問題にシンプルで明確な解決策はありますか? web.py内のフォルダの名前を変更する必要がありますか?

答えて

1

/static/のweb.pyの使い方を変更する簡単な方法はありませんが、あなたのリストに何かを追加する必要はありません。自分自身を追加するには本当に簡単な方法があります。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

関連する問題