【问题标题】:Problems serving static files favicon.ico and robots.txt in CherryPy 3.1在 CherryPy 3.1 中提供静态文件 favicon.ico 和 robots.txt 时出现问题
【发布时间】:2011-11-10 14:40:44
【问题描述】:

例如,当我尝试浏览 favicon.ico 时,我收到此错误:

ValueError: Static tool requires an absolute filename (got 'favicon.ico')

我可以访问我的 /images、/css 和 /js 文件夹中的任何内容。那些服务很好。该网站的外观和行为都很棒。就这两个该死的文件。

这是我的 root.conf 文件。

[/]
tools.staticdir.on = True
tools.staticdir.root = "/projects/mysite/root"
tools.staticdir.dir = ""

[/favicon.ico]
tools.staticfile.on = True
tools.staticfile.filename = "favicon.ico"
tools.staticdir.on = True
tools.staticdir.dir = "images"

[/robots.txt]
tools.staticfile.on = True
tools.staticfile.filename = "robots.txt"
tools.staticdir.on = True
tools.staticdir.dir = ""

[/images]
tools.staticdir.on = True
tools.staticdir.dir = "images"

[/css]
tools.staticdir.on = True
tools.staticdir.dir = "css"

[/js]
tools.staticdir.on = True
tools.staticdir.dir = "js"

这是我的cherrypy.conf 文件:

[global]
server.socket_port = 8888
server.thread_pool = 10
tools.sessions.on = True

这是我的“startweb.py”脚本:

import cherrypy
from root.roothandler import Root

cherrypy.config.update("cherrypy.conf")

cherrypy.tree.mount(Root(), "/", "root/root.conf")

if hasattr(cherrypy.engine, 'block'):
    # 3.1 syntax
    cherrypy.engine.start()
    cherrypy.engine.block()
else:
    # 3.0 syntax
    cherrypy.server.quickstart()
    cherrypy.engine.start()

【问题讨论】:

    标签: python cherrypy


    【解决方案1】:

    当您为特定 URL 启用 CherryPy 工具时,它也会为它下面的所有“子”URL 启用。所以配置中的[/images][/css][/js] 部分似乎是多余的。 [/robots.txt] 部分也是如此。

    [/favicon.ico] 也是多余的,除了 favicon.ico 是特殊的,因为 CherryPy 通常会为您设置一个(作为根对象的属性;请参阅_cptree.py)。所以覆盖它是合适的:

    [/]
    tools.staticdir.on = True
    tools.staticdir.root = "/projects/mysite/trunk/root"
    tools.staticdir.dir = ""
    tools.staticfile.root = "/projects/mysite/trunk/root"
    
    [/favicon.ico]
    tools.staticfile.on = True
    tools.staticfile.filename = "images/favicon.ico"
    

    【讨论】:

      【解决方案2】:

      我找到了一种可行的解决方案,但我不太喜欢它。它需要将完整的绝对路径放在 3 个位置。

      这是新的 root.conf

      [/]
      tools.staticdir.on = True
      tools.staticdir.root = "/projects/mysite/trunk/root"
      tools.staticdir.dir = ""
      
      [/favicon.ico]
      tools.staticfile.on = True
      tools.staticfile.filename = "/projects/mysite/trunk/root/images/favicon.ico"
      
      [/robots.txt]
      tools.staticfile.on = True
      tools.staticfile.filename = "/projects/mysite/trunk/root/robots.txt"
      
      [/images]
      tools.staticdir.on = True
      tools.staticdir.dir = "images"
      
      [/css]
      tools.staticdir.on = True
      tools.staticdir.dir = "css"
      
      [/js]
      tools.staticdir.on = True
      tools.staticdir.dir = "js"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-17
        • 2017-03-04
        • 2020-07-23
        • 2014-02-22
        • 2011-07-22
        • 1970-01-01
        相关资源
        最近更新 更多