使用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
运行时,相对路径不再有效。我的模板目录位于我的项目文件夹中。
我不想做的是使用绝对路径,因为我希望能够移动我的项目文件,而不必修改代码以保持其正常工作。
答案 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)