【问题标题】:Python CherryPy calling HTML filePython CherryPy 调用 HTML 文件
【发布时间】:2015-03-08 11:24:28
【问题描述】:

我正在将 CherryPy 与 Python 一起使用,而且我对这一切都很陌生。最终我也会使用 JQuery,所以按照网上的一个例子,我有下面的内容,它正确地调用了 html。

我的问题是,虽然它调用了我的 html,但我不确定如何处理我的 CSS 和图像。我已经尝试从 html 中正常调用它们,但我没有任何运气。

def index(self):
    return file('index.html')

 if __name__ == '__main__':
 conf = {
     '/': {
         'tools.sessions.on': True,
         'tools.staticdir.root': os.path.abspath(os.getcwd())
     },
     '/generator': {
         'request.dispatch': cherrypy.dispatch.MethodDispatcher(),
         'tools.response_headers.on': True,
         'tools.response_headers.headers': [('Content-Type', 'text/plain')],
     },
     '/static': {
         'tools.staticdir.on': True,
         'tools.staticdir.dir': './public'
     }
 }

webapp = StringGenerator()
webapp.generator = StringGeneratorWebService()
cherrypy.quickstart(webapp, '/', conf)

在我的 html 中,我有正常的 <link href="/static/css/style2.css" rel="stylesheet">,但它不起作用。

我的文件结构是 - public 和 css 是一个文件夹:

fitbit.py fitbit.html - 上市 -CSS style2.css

所以它正确调用了 fitbit.html,但在 html 中,我无法获取 css 和图像。任何有关如何调用它的帮助将不胜感激。

【问题讨论】:

    标签: python html css cherrypy


    【解决方案1】:

    资源的 url 与您请求的 url 相关,而不是文件的实际路径。所以css href应该是href="media/fitbit.css"

    编辑(一些代码):

    应用程序代码(app.py)是

    import cherrypy
    from os.path import abspath
    
    def app():
        return file("media/index.html")
    app.exposed = True
    
    CP_CONF = {
            '/media': {
                'tools.staticdir.on': True,
                'tools.staticdir.dir': abspath('./media') # staticdir needs an absolute path
                }
            }
    
    if __name__ == '__main__':
        cherrypy.config.update({'server.socket_port': 8082})
        cherrypy.quickstart(app, '/', CP_CONF)
    

    Index.html 是

    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="media/style.css">
    </head>
    
    <body>
    This is the body
    </body>
    
    </html>
    

    目录结构是

    Project Dir
        app.py
        /media
             index.html
             style.css
    

    重点是

    1. Staticdir 需要绝对路径,您必须小心映射。为了简单起见,这里的静态 url root 和目录名是一样的

    2. 静态资产 url 是相对于根 url 例如媒体/style.css

    【讨论】:

    • 我尝试了很多不同的文件路径,但没有一个有效。将问题编辑为具有相同问题的不同版本。最糟糕的是,它是 CherryPyDocs 中的一个示例
    • 还是一样
    • 使用上面的代码?不可能,你做错了什么。
    【解决方案2】:

    顺便说一句,你们不必考虑目录结构

    喜欢

    ├── index.html
    ├── about-page.html
    ├── app.py
    ├── assets
    │   ├── css
    │   │   ├── animate.css
    │   │   ├── bootstrap.css
    │   │   ├── color1.css
    │   │   ├── color10.css
    │   │   ├── color11.css
    │   │   ├── color12.css
    

    它可以工作$ Python3 /Users/me/Desktop/html-template/app.py

    import cherrypy
    from os.path import abspath
    
    def app():
        return open("index.html")
    app.exposed = True
    
    CP_CONF = {
            '/': {
                'tools.staticdir.on': True,
                'tools.staticdir.dir': abspath('./') # staticdir needs an absolute path
                }
            }
    
    if __name__ == '__main__':
        cherrypy.config.update({'server.socket_port': 8082})
        cherrypy.quickstart(app, '/', CP_CONF)
    

    【讨论】:

      猜你喜欢
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2012-04-10
      • 2015-05-13
      • 2016-02-09
      • 1970-01-01
      • 2016-12-23
      • 2012-10-30
      相关资源
      最近更新 更多