无法使用Cherrypy禁用或删除favicon.ico

时间:2015-03-12 18:19:57

标签: python cherrypy

我有一个问题是将默认的cherrypy favicon更改为我自己的,名为book.ico,位于public / images / books.ico中。我已经尝试使用以下代码禁用它:

    '/favicon.ico': {
            'tools.staticfile.on': False,
       }

但该图标仍显示为标签标签。我正在使用Chrome以隐身模式浏览网站。

import cherrypy
import os
import glob


class HelloWorld(object):
    favicon_ico = None
    @cherrypy.expose
    def index(self):
        return file('public/html/index.html')

...跳过def generate(self,name)

if __name__ == '__main__':
    cherrypy.config.update({

    'server.socket_host': 
            '192.168.2.9','server.socket_port':8080, 
    '/static': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': os.getcwd(),
    },
    '/public': {
            'tools.staticdir.on': True,
            'tools.staticdir.dir': os.path.join(os.getcwd(), "/public"),
        },
    '/favicon.ico': {
            'tools.staticfile.on': True,
            'tools.staticfile.filename': os.path.join(os.getcwd(), '/public/images/books.ico')
    }
    })
    cherrypy.tree.mount(HelloWorld())
    cherrypy.engine.start()
    cherrypy.engine.block()

目录结构

.
├── app.conf
├── bin
│   ├── activate
│   ├── activate.csh
│   ├── activate.fish
│   ├── activate_this.py
│   ├── cherryd
│   ├── easy_install
│   ├── easy_install-2.7
│   ├── pip
│   ├── pip2
│   ├── pip2.7
│   ├── python
│   ├── python2 -> python
│   └── python2.7 -> python
├── books.ico
├── CherrypyProd.py
├── images
├── pip-selfcheck.json
├── public
│   ├── css
│   ├── html
│   │   ├── books.png
│   │   └── index.html
│   └── images
│       ├── books.ico
│       └── books.png
├── ssl
├── static
    └── books.png

如何用我自己的books.ico ???

替换默认的favicon.ico

提前感谢您的帮助。如果我能进一步澄清,请告诉我。

2 个答案:

答案 0 :(得分:2)

有点已知但令人烦恼的favicon cache issue

W3C recommends使用链接标记,而不是自HTML 4.01以来依赖/favicon.ico。它允许您避免为favicon制作例外路线并使用普通图像格式,如JPEG和PNG。它还允许公司缓存失效在查询字符串中提供版本。

<link rel="icon" type="image/png" href="/static/myicon.png?v=1">

为了确保您的配置正常,并且浏览器缓存问题会对文件和CherryPy响应进行校验和。

cat books.ico | md5sum
wget -qO- http://192.168.2.9:8080/favicon.ico | md5sum

一个侧面建议,不要依赖os.getcwd,因为它很容易忘记事先设置当前目录的假设。最好设置path = os.path.abspath(os.path.dirname(__file__))并稍后再使用它。

答案 1 :(得分:1)

在根类中尝试“favicon_ico”处理程序方法,如旧版CherryPy文档中所述:https://cherrypy.readthedocs.org/en/3.2.6/progguide/files/favicon.html