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

标签 python bottle openshift

我正在开发一个应用程序,托管在 openshift 上并基于他们的 Bottle.py 快速入门示例( https://github.com/openshift/bottle-openshift-quickstart )构建,但我很难正确使用静态文件。我有一个本地版本,可以与 Bottle 中内置的服务器一起使用,但是当我将本地工作的内容转移到 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 文件的正确方法。

谢谢。

最佳答案

我已经评估了您的项目。您遇到了这个问题,完全是由错误的配置引起的。 首先,引用这里资源。 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 环境中显式设置 View 路径。

   from bottle import TEMPLATE_PATH                                               

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

模板中的 View :

<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>  

关于python - 在 openshift 上的 Bottle.py 应用程序中加载静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10693695/

相关文章:

dns - DNS 952 子域约定是什么

python - 有没有办法将 pmml 文件导入到 python 中?

Python Pandas Lambda : Using multiple variables Lambda within DataFrame

python - 格式化程序有问题 : "unsupported operand type(s) for %: ' NoneType' and 'tuple' "

python - 是否可以在 Bottle Web 框架中运行任务调度程序

linux - python bottle 服务器在 Linux 上不工作

python - 如何以更快的方式从数据框中删除一系列行

python - 使用 Python Bottle 的 Webhelpers

mysql - 打开换档错误。无法通过 mysql.sock 连接到数据库

docker - 在kubernetes部署中将configMap作为参数传递