在Apache上部署时使用webpy的web.template.render()和相对路径
在使用webpy的时候,怎么正确地引用模板文件夹,以便在webpy的开发服务器和Apache服务器上都能正常工作呢?
下面这段代码在开发服务器上可以正常运行,但在我的Apache服务器上却不行。
import web
urls = (
'/', 'index',
)
class index:
def GET(self):
render = web.template.render('templates/')
return render.index(self)
我知道问题出在web.template.render('templates/')
这行代码上,因为当Apache从C:\Program Files\Apache Software Foundation\Apache2.2
运行时,相对路径就不再有效了。我的模板文件夹是在我的项目文件夹里面。
我不想使用绝对路径,因为我希望能够随意移动我的项目文件,而不需要修改代码来保持它的正常运行。
1 个回答
6
如果你在使用mod_wsgi,最简单的解决办法就是把home= 这个选项设置好。
另外,你也可以获取模块的路径,然后把它和模板结合起来,也就是说:
os.path.join(os.path.dirname(__file__), 'templates/')
如果你经常需要这样做,可以把它放在一个函数里。要注意的是,如果你把它放在一个单独的模块里,这个模块需要和模板目录在同一个文件夹里,否则你会再次遇到目录错误的问题。
如果你想把它放在系统范围的包里,你可以很容易找到调用者的目录:
def abspath(path):
frame = sys._getframe(1)
base = os.path.dirname(frame.f_globals['__file__'])
return os.path.join(base, path)