在Apache上部署时使用webpy的web.template.render()和相对路径

2 投票
1 回答
2284 浏览
提问于 2025-04-16 04:03

在使用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)

撰写回答