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

时间:2010-09-13 03:29:37

标签: python web.py

使用webpy,引用web.template.render()的模板目录的正确方法是什么,以便它可以在webpy开发Web服务器和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 个答案:

答案 0 :(得分:6)

如果你正在使用mod_wsgi,最简单的解决方案是适当地设置home = option

或者,您可以获取模块的路径并将其与模板相结合,即

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)