我正在开发一个应用程序,托管在 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 文件的正确方法。
谢谢。