无法正确调用静态内容

时间:2018-10-23 20:02:11

标签: python cherrypy

我从CherryPy v18.0.1开始,并停留在教程6,here中。我也在运行Python v3.7。从教程中调用style.css表时,我始终收到404错误,并且不确定问题出在哪里。我已经看到出于安全原因需要设置“ / static”目录,但是事情并未按预期进行。这是我定义的:

import os, os.path
import random
import string

import cherrypy


class StringGenerator(object):
@cherrypy.expose
def index(self):
    return """<html>
      <head>
        <link href="style.css" rel="stylesheet">
      </head>
      <body>
        <form method="get" action="generate">
          <input type="text" value="8" name="length" />
          <button type="submit">Show me the number!</button>
        </form>
      </body>
    </html>"""

@cherrypy.expose
def generate(self, length=8):
    some_string = ''.join(random.sample(string.hexdigits, int(length)))
    cherrypy.session['mystring'] = some_string
    return some_string

@cherrypy.expose
def display(self):
    return cherrypy.session['mystring']


if __name__ == '__main__':
conf = {
    '/': {
        'tools.sessions.on': True,
        'tools.staticdir.root': 'C:/python37'
    },
    '/static': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': 'static/Scripts/css'
    }
}
cherrypy.quickstart(StringGenerator(), '/', conf)

基于我的有限知识,我将根目录设置为“ C:/ python37”,文件目录设置为“ static / Scripts / css”,然后在以下位置调用样式表:

<link href="style.css" rel="stylesheet">

对此进行任何澄清都很好。谢谢大家。

1 个答案:

答案 0 :(得分:0)

在上面链接的教程中:

  • tools.staticdir.root是“我们所有静态内容的根目录”
  • tools.staticdir.dir是“所有以/ static开头的URL将作为静态内容作为根目录的直接子目录。”

这意味着root目录应该是您所有内容(HTML,CSS,图像,字体...)所在的目录。不是您的python安装根目录。

静态dir只是根目录中的子目录。可以将其命名为任何您想要的名称。 CherryPy将配置字典中用作键的/static路径映射到根目录中的真实名称。

示例:

conf = {
    '/': {
        'tools.sessions.on': True,
        'tools.staticdir.root': 'C:/users/chad/tutorials/7'
    },
    '/static': {
        'tools.staticdir.on': True,
        'tools.staticdir.dir': 'public-content'
    }
}

然后,在此示例中,您应使用名为C:/users/chad/tutorials/7的子文件夹,将public-content创建为所有静态内容的根目录,并在其中放置任何文件夹样式和任何其他公共内容。

对于样式表,可以在(css)中有一个C:/users/chad/tutorials/7/public-content/css子文件夹,并将style.css放在其中。您将通过以下方式链接到它:

<link href="/static/css/style.css" rel="stylesheet">
            ======= ###

URL中的static路径(标记为=)来自用作配置文件中密钥的/staticcss路径(标记为#)来自C:/users/chad/tutorials/7/static-content内的文件夹。

请注意,静态文件夹的真实名称public-content不会出现在URL中。

应用这些规则,您可以拥有所需的任何目录结构。例如,如果您想要C:/users/chad/tutorials/7/public-content/images中的图片,则可以这样链接到它们:

<img src="/static/images/logo.png">
           ====== ######