我对应用引擎和python非常陌生。我已经完成了教程,但还没有找到一个简单/优雅的解决方案来满足我的需要。
我想创建一个有多个目录的网站:
/home
/index.html
/stuff
/index.html
/otherstuff
/index.html我知道我可以很容易地做到这一点,如果在我的app.yaml文件中我这样做:
- url: /otherstuff
script: account/otherstuff.py
- url: /stuff
script: game/stuff.py
- url: .*
script: home.py我的问题是,这不是一个优雅的解决方案,因为我将有3个python文件来提供简单的html文件。相反,我只希望有一个python文件将get请求路由到适当的目录。因为我是一个应用程序引擎和python的新手-我希望有人愿意为如何做到这一点提供一些线索。
非常感谢!
发布于 2014-08-19 12:12:31
如果html文件是静态文件,则不需要通过Python提供它们。(正如Paul Collingwood指出的那样)
但是,如果您坚持使用Python作为学习因素,或者您的html文件是动态的。这是一个建议。
在app.yaml文件中,您可以声明:
handlers:
- { script: main.app, url: /.* }其中main是您的python文件名,app是python文件中的变量名。
创建一个包含内容的main.py文件:
import webapp2
class HomeHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write("<h1>Hello</h1>")
return
class StuffHandler(webapp2.RequestHandler):
def get(self):
self.response.out.write("<h1>Stuff</h1>")
return
app = webapp2.WSGIApplication(
[
('/', HomeHandler),
('/stuff/', StuffHandler)
],
debug=True
)这应该能给你一个主意。
您应该通过模板为html页面提供服务,以便将html与python代码分开。您可以使用jinja2库来做到这一点。
简单html jinja2模板签出的示例:http://www.stefanolocati.it/blog/?p=1338
希望这能帮上忙。干杯。
更新:
如果您希望它动态地捕获名称,您可以这样做:
class DynamicHandler(webapp2.RequestHandler):
def get(self, stuff):
self.response.write('This is the DynamicHandler. '
'The string is %s' % stuff)
app = webapp2.WSGIApplication(
[
(r'/', HomeHandler),
(r'/(.*)', DynamicHandler)
],
debug=True
)这将使您了解如何处理目录名。
关于处理404,通常可以在末尾添加这一行。(在app=webapp2之后)
def handle_404(request, response, exception):
response.write('This is not the droid you are looking for')
response.set_status(404)
app.error_handlers[404] = handle_404但是,由于我们的regex非常广泛,所以您必须处理DynamicHandler中的所有内容(例如,如果有人输入了/droid如果要满足正则表达式),您必须在DynamicHandler中引发您自己的异常。
有关webapp2异常处理,请参阅此页面
https://webapp-improved.appspot.com/guide/exceptions.html
作为一个建议,我不会像上面的例子那样去做广泛的/动态的事情,但是希望这能帮助你做你想做的事情。
干杯。
发布于 2016-04-05 14:01:17
烧瓶-平底袋或多或少地做了你想做的事情,但实际上,你没有理由在App上托管一个静态站点。
https://stackoverflow.com/questions/25376461
复制相似问题