2

私はアプリケーションに取り組んでおり、openshiftでホストされ、bottle.pyクイックスタートの例(https://github.com/openshift/bottle-openshift-quickstart)に基づいて構築されていますが、静的ファイルを正しく使用するのに苦労しました。ボトルに組み込まれたサーバーで動作するローカルバージョンがありますが、ローカルで動作するものをopenshiftアプリケーションに転送すると、動作が異なります。

私のローカルmain.tplでは、次の行を使用して、ロードする必要のあるファイルを示しています。

<link rel="stylesheet" href="{{ get_url('static', file_name='base.css') }}">
<link rel="stylesheet" href="{{ get_url('static', file_name='skeleton.css') }}">
<link rel="stylesheet" href="{{ get_url('static', file_name='layout.css') }}">

私のローカルapp.pyで、次のコードは正しいファイルを提供しようとします...

app = default_app()

@route('/')
@view('main.tpl')
def index():
    return {'get_url': app.get_url}

@route('/static/<file_name>', name="static")
def send_static(file_name):
    if file_name[-3:] == 'css':
        return static_file(file_name, root=os.path.join(os.getcwd(), 'static', 'styles'))

send_static条件は、cssファイルのルートロケーションを持つ関数やjsファイルのルートロケーションを持つ関数など、いくつかの同様の関数を記述せずに/staticディレクトリを整理する方法を見つけようとしていたためです。

コードがopenshiftで使用されると、機能しなくなります。ローカルバージョンは表示されたページに「/static/styles/base.css」を挿入しますが、openshiftバージョンは「/static/base.css」のみを挿入します。cssファイルをロードするために、私は次のコードに出くわしました。

私のmain.tplは同じままです...

<link rel="stylesheet" href="{{ get_url('static', file_name='base.css') }}">
<link rel="stylesheet" href="{{ get_url('static', file_name='skeleton.css') }}">
<link rel="stylesheet" href="{{ get_url('static', file_name='layout.css') }}">

しかし、私のopenshift app.pyでは、サブディレクトリをルートに明示的に配置する必要がありました

application = default_app()

@route('/')
@view('main.tpl')
def index():
    return {'get_url': application.get_url}

@route('/static/styles/<file_name>', name="static")
def send_static(file_name):
    if file_name[-3:] == 'css':
        root_dir = os.path.join(os.getcwd(), 'static', 'styles')
        return static_file(file_name, root=root_dir)

違いを引き起こすopenshiftサーバー環境について何かが足りませんか?アプリは動作していますが、cssファイルをロードして表示する適切な方法を知りたいです。

ありがとう。

4

2 に答える 2

2

私はあなたのプロジェクトを評価しました。設定が間違っていることが原因で、この問題が発生しました。まず、ここのリソースを参照してください。 javascriptまたはcssファイルをBottlePyテンプレートにロードする方法は?

あなたは気づくでしょう、あなたはあなたの静的フォルダをマッピングするためにハッシュを設定することができます

@route('/static/:path#.+#', name='static')
def static(path):
    return static_file(path, root='static')

別の問題として、openshiftenvでビューパスを明示的に設定する必要があります。

   from bottle import TEMPLATE_PATH                                               

   import os                                                                      
   views_path = os.environ['APPDIR'] + '/repo/wsgi/views'                         
   TEMPLATE_PATH.insert(0,views_path)                                             
   app = default_app()  

テンプレートのビュー:

<head>                                                                         
<script type="text/javascript" src="{{ get_url('static', path='js/main.js') }}" charset="utf-8"></script>                                                
</head>                                                                        
<body>                                                                         
<p>it's works</p>                                                              
</body>                                                                        
</html>  
于 2012-05-29T06:31:13.200 に答える
0

ボトルがviewsフォルダー内のtplファイルを認識できない場合。

私が使用した:

TEMPLATE_PATH.append(os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'wsgi/views/'))

そしてそれは動作します。

于 2013-06-12T17:47:26.713 に答える