在openshift上的Bottle.py应用程序中加载静态文件

时间:2012-05-21 22:54:31

标签: python bottle openshift

我正在开发一个应用程序,托管在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'))

有条件的是因为我试图想出一种方法来保持/ static目录的组织而不必编写几个类似的send_static函数,一个具有css文件的根位置的函数有一个根js文件的位置或其他。

当代码在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文件。

感谢。

2 个答案:

答案 0 :(得分:2)

我评估了你的项目。你遇到了这个问题,完全是由错误的配置引起的。 首先,在这里参考资源。 How to load a javascript or css file into a BottlePy template?

您会注意到,您可以设置哈希来映射您的静态文件夹

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

另一个问题,我们需要在您的openshift环境中明确设置视图路径。

   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>  

答案 1 :(得分:0)

如果你的瓶子在views文件夹中看不到tpl文件。

我用过:

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

它有效。