3

我正在学习 Python The Hard Way,目前正在完成练习 51。在其中,要求学生尝试使用 web.py 框架构建一些基本的 Web 应用程序。第一个学习练习是提高 HTML 布局的质量,以便应用程序构建在格式良好的页面上。我正在寻找一个适用于应用程序中所有页面的模板布局,并利用 CSS 样式表来提供格式。我希望 CSS 格式是外部的,而不是 HTML 文件中的。出于某种原因,无论我如何格式化“main_layout.css”的路径,我都无法使格式更改生效。我已经尝试了带有前导“/”而没有前导“/”的路径。我尝试将 CSS 文件移动到另一个文件夹(根文件夹,和模板文件夹)。我尝试清空我的浏览器缓存以防出现问题。我尝试直接通过浏览器访问“静态”目录和“main_layout.css”文件本身,这两种情况下我都能做到——文件都在那里,但我无法让它接受格式来自“main_layout.css”的标记。我用谷歌搜索了这个问题,检查了 web.py 的 google 组,并搜索了 stackoverflow——在所有情况下,答案都与 css 文件的路径有关,我相信我已经充分探索并尝试修复无济于事。我已经尝试了所有可以在网上找到的建议,但我很难过。我的代码如下:文件本身直接通过我的浏览器,我在这两种情况下都能做到——文件在那里,但我不能让它接受来自“main_layout.css”的格式标记。我用谷歌搜索了这个问题,检查了 web.py 的 google 组,并搜索了 stackoverflow——在所有情况下,答案都与 css 文件的路径有关,我相信我已经充分探索并尝试修复无济于事。我已经尝试了所有可以在网上找到的建议,但我很难过。我的代码如下:文件本身直接通过我的浏览器,我在这两种情况下都能做到——文件在那里,但我不能让它接受来自“main_layout.css”的格式标记。我用谷歌搜索了这个问题,检查了 web.py 的 google 组,并搜索了 stackoverflow——在所有情况下,答案都与 css 文件的路径有关,我相信我已经充分探索并尝试修复无济于事。我已经尝试了所有可以在网上找到的建议,但我很难过。我的代码如下:我相信我已经充分探索并试图修复无济于事。我已经尝试了我在网上可以找到的所有建议,但我很难过。我的代码如下:我相信我已经充分探索并试图修复无济于事。我已经尝试了我在网上可以找到的所有建议,但我很难过。我的代码如下:

/bin
    app.py
/ex51
/static
    main_layout.css
/templates
    hello_form.html
    index.html
    layout.html
/tests

app.py 编写如下:

import web

urls = (
    '/hello', 'Index'
    )

app = web.application(urls, globals())

render = web.template.render('templates/', base="layout")

class Index(object):
    def GET(self):
        return render.hello_form()

    def POST(self):
        form = web.input(name="Nobody", greet="Hello")
        greeting = "%s, %s" % (form.greet, form.name)
        return render.index(greeting = greeting)

if __name__ == "__main__":
    app.run()

index.html 写成如下:

$def with (greeting)

$if greeting:
    I just wanted to say <em style="color: green; font-size: 2em;">$greeting</em>
$else:
    <em>Hello</em>, world!

hello_form.html 写成如下:

<h1>Fill out this form</h1>

<form action="/hello" method="POST">
    A Greeting: <input type="text" name="greet">
    <br/>
    Your Name: <input type="text" name="name">
    <br/>
    <input type="submit">
</form>

main_layout.css 写成如下:

html, body {
    height: 100%;
    }

.container {
    width:800px;
    }

.container #body_container {
    margin: 10px auto;
    padding-bottom: 50px;
    min-height: 100%;
    text-align: center;
    overflow: auto;
    }

.container #footer_container {
    margin-top: -50px;
    height: 50px;
    }

和 layout.html:

$def with (content)

<html>
    <head>
        <link rel="stylesheet" type="text/css" href="/static/main_layout.css" />
        <title>This is My Page</title>
    </head>

    <body>
        <div class="container" id="body_container">

            $:content

        </div>

        <div class="container" id="footer_container">
            Hello World
        </div>
    </body>
</html>

在此先感谢您的帮助。

编辑:另外一点信息——我正在从我的 Windows 7 PC 的 PowerShell 运行此脚本,并http://localhost:8080/hello通过 Google Chrome 访问它。

4

1 回答 1

0

您正在使用 octothorp (#) 注释掉 CSS 文件,这对于 CSS 文档是不正确的(但对于 Python 是正确的,这就是混淆所在)。使用 /* 注释掉 CSS 文档中的代码。像这样:

.container /*body_container*/ {
    margin: 10px auto;
    padding-bottom: 50px;
    min-height: 100%;
    text-align: center;
    overflow: auto;
    }

于 2015-04-06T17:46:18.087 回答