LearnPythonTheHardWay练习50

时间:2013-05-24 17:34:13

标签: python python-2.7

这显然是一个简单的问题,但我似乎无法得到它。在LPTHW Exercise 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,非常感谢任何帮助

2 个答案:

答案 0 :(得分: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
  3. 因此,您可以做的一件事就是在练习的 Study Drills 部分之前建议,只需将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模板。

答案 1 :(得分:1)

您正在此处构建Web服务,而不是静态网站。您的.html文件是用于构建动态页面的模板,而不是用于提供服务的静态页面。因此,如果web.py允许您自动访问foo.html,那就太糟糕了。

如果查看日志输出,它实际上并没有为GET处理/index.html,而是使用{{1}处理GET/ }。

无论如何,所做的提供的内容完全由您在templates/index.html中编写的代码驱动,并且您告诉它在此处提供什么:

app.py

这说明urls = ( '/', 'index' ) 的请求应该由/类的实例处理。该课程如下:

index

换句话说,它不会“自动定位index.html页面”,它会自动定位render = web.template.render('templates/') class index: def GET(self): greeting = "Hello World" return render.index(greeting=greeting) 类,该类使用明确指向index的渲染器(通过index.html位。

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

  

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

所以,这就是你必须要做的。您必须使用render.index进行渲染。

最简单的方法是:

render.foo()

有更灵活的方法可以做,但是当你浏览web.py教程时,你将学习它们。 (在继续练习之前,练习还要求你做。)