1

这显然是一个简单的问题,但我似乎无法理解。在LPTHW 练习 50中,我被要求创建一个网页 foo.html。我已经完成了这项工作并将其保存在我的项目骨架的模板文件夹中。

当我在http://localhost:8080浏览器中输入时,它会自动定位 index.html 页面。这个的文件路径是Python/projects/gothonweb/templates/index.html

但是,当我尝试通过键入以下任何内容来定位我的 foo.html 页面时,我无法找到它。它的文件路径是Python/projects/gothonweb/templates/foo.html

http://localhost:8080/foo.html
http://localhost:8080/templates/foo.html
http://localhost:8080/gothonweb/templates/foo.html
http://localhost:8080/projects/gothonweb/templates/foo.html
http://localhost:8080/Python/projects/gothonweb/templates/foo.html

这是我第一次在网络上使用python,非常感谢任何帮助

4

2 回答 2

2

您需要为您的foo.html文件创建一个路由。从 LPTHW 练习 50 中,以下是您的相关代码bin/app.py

import web

urls = (
  '/', 'Index'
)

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

render = web.template.render('templates/')

class Index(object):
    def GET(self):
        greeting = "Hello World"
        return render.index(greeting = greeting)

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

注意几件事:

  1. 变量,你的urls路线,只有一条通往/路径的路线。
  2. Index你打电话的班级里render.index

所以,你可以做的一件事,正如它在练习的学习练习部分之前所建议的那样,就是简单地将render.index调用更改为render.foo. 使用 Web 框架时,这将foo.html在您加载索引路径时呈现文件。

您可以做的另一件事是向您添加另一条路线urls并创建一条class Foo来捕获这条路线:

import web

urls = (
  '/', 'Index',
  '/foo', 'Foo'
)

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

render = web.template.render('templates/')

class Index(object):
    def GET(self):
        greeting = "Hello World"
        return render.index(greeting = greeting)

class Foo(object):
    def GET(self):
        return render.foo()

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

现在,当您转到http://localhost:8080/foo它时,它将呈现您的foo.html模板。

于 2013-05-24T17:57:55.580 回答
1

你在这里建立一个网络服务,而不是一个静态网站。您的.html文件是用于构建动态页面的模板,而不是用于提供的静态页面。web.py因此,如果让您自动访问它会很糟糕foo.html

如果您查看日志输出,它实际上并没有处理GETfor ,而是使用/index.html处理 a GETto 。/templates/index.html

无论如何,它所提供的服务完全是由您编写的代码驱动的app.py,并且您已经告诉它在这里提供什么服务:

urls = (
  '/', 'index'
)

这就是说,请求/应该由index类的一个实例来处理。该类如下所示:

render = web.template.render('templates/')

class index:
    def GET(self):
        greeting = "Hello World"
        return render.index(greeting=greeting)

换句话说,它不会“按应有的方式自动定位 index.html 页面”,它会自动定位index类,该类使用显式指向的渲染器index.html(通过render.index位)。

该练习明确解释了所有这些,然后要求您:

还要创建另一个名为 templates/foo.html 的模板,并使用 render.foo() 而不是之前的 render.index() 来渲染它。

所以,这就是你必须做的。您必须使用render.foo().

最简单的方法是这样做:

urls = (
  '/', 'index',
  '/foo', 'foo'
)

# ...

class foo:
    def GET(self):
        greeting = "Foo"
        return render.foo(greeting=greeting)

有更灵活的方法来做事,但是您将在学习 web.py 教程时学习它们。(该练习还要求您在继续之前执行此操作。)

于 2013-05-24T17:54:51.700 回答