我有以下代码。它可以为index.html或位于home /目录中的任何文件提供服务,但不会提供位于嵌套目录中的任何文件,例如home / image / xyz.png。
import os
import sys
import ctypes
import pprint
import bottle
import socket
from bottle import *
#global functions
def ReadStringFromFile( file ):
f = open(file, 'r')
data = f.read()
f.close()
return data
def getBits():
#get the system bits
sysBit = (ctypes.sizeof(ctypes.c_voidp) * 8)
if((not(sysBit == 32)) and (not (sysBit == 64))):
sysBit = 0
return sysBit
class DevelServer( object ):
addr = ''
def __init__( self ):
self.addr = socket.gethostbyname( socket.gethostname() )
pass
def index( self ):
return ReadStringFromFile('home/index.html')
#these are not the URLs you are looking for
def error404( self, error):
return '<br><br><br><center><h1>Go <a href="/">home</a>, You\'re drunk.'
def send_static( self, filename):
print (static_file(filename, root=os.path.join(os.getcwd(), 'home')))
return static_file(filename, root=os.path.join(os.getcwd(), 'home'))
#start hosting the application
def startThis( self ):
bottle.run(host=self.addr, port=80, debug=True)
#instatiate the main application class an initalize all of the app routes
def Main():
ThisApp = DevelServer()
bottle.route('/')(ThisApp.index)
bottle.route('/home/<filename>')(ThisApp.send_static)
bottle.error(404)(ThisApp.error404)
ThisApp.startThis()
Main()
答案 0 :(得分:7)
更改此行:
bottle.route('/home/<filename>')(ThisApp.send_static)
到此:
bottle.route('/home/<filename:path>')(ThisApp.send_static)
(添加“:路径”。)
The Bottle docs解释原因:
static_file()函数是一个帮助器,用于在安全的文件中提供文件 方便的方法(参见静态文件)。此示例仅限于文件 直接在/ path / to / your / static / files目录下,因为 通配符与路径中的斜杠不匹配。 服务 子目录中的文件,更改通配符以使用路径过滤器 ...
我用我的修改运行了你的代码,它对我有用 - 它也能为你工作吗?