【问题标题】:CherryPy configuration tools.staticdir.root problemCherryPy配置工具.staticdir.root问题
【发布时间】:2011-02-26 14:48:15
【问题描述】:

如何使我的静态文件根目录相对于我的应用程序根文件夹(而不是硬编码路径)?

按照 CP 指令 (http://www.cherrypy.org/wiki/StaticContent) 我在我的配置文件中尝试了以下内容:

tree.cpapp = cherrypy.Application(cpapp.Root())
tools.staticdir.root = cpapp.current_dir

但是当我运行cherrpy.quickstart(rootclass, script_name='/', config=config_file) 我收到以下错误

builtins.ValueError: ("配置错误在部分:'global',选项:'tree.cpapp',值:'cherrypy.Application(cpapp.Root())'。配置值必须是有效的 Python .", 'TypeError', ("unrepr 无法解析名称 'cpapp'",))

我知道我可以在调用 quickstart 之前从 main.py 文件中进行配置(例如,使用 os.path.abspath(os.path.dirname(file))),但是如果可能,我更喜欢使用单独的配置文件的想法。

任何帮助将不胜感激(如果相关,我将 CP 3.2 与 Python 3.1 一起使用)

TIA 艾伦

【问题讨论】:

    标签: python configuration relative-path cherrypy


    【解决方案1】:

    当您在配置条目中引用模块时,CherryPy 首先在 sys.modules 中查找该模块。因此,一种解决方案是在您致电 quickstart 之前发送至 import cpapp

    但是如果在sys.modules 中的查找失败,CherryPy 会尝试__import__ 模块。由于这也失败了,您可能需要调查您的 cpapp.py 模块是否确实可导入。

    查看lib/reprconf.py 模块了解所有血腥细节。

    【讨论】:

    • 嗨 fumanchu - 感谢您的回复。据我所见,没有要导入的 cpapp.py 模块,所以我无法尝试该选项。我认为最好的解决方案可能是为每个应用程序(我猜这是预期的设计用途)设置一个单独的配置文件,硬编码 tools.staticdir.root,然后设置所有其他子文件夹(css, js 等)相对于根目录。
    • cpapp.py 是您声明 Root 类的任何地方。例如,如果您的 Root 类位于 myapp/main.py 中,那么您的配置需要显示“tree.cpapp = cherrypy.Application(myapp.main.Root())”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 2013-11-05
    • 2010-12-30
    相关资源
    最近更新 更多