我对app引擎和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的新手 - 我希望有人愿意阐明如何做到这一点。
非常感谢!
答案 0 :(得分:0)
如果你的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
但是由于我们的正则表达式非常广泛,你必须处理DynamicHandler中的所有内容(即如果有人输入/ droid,如果满足正则表达式),你必须在DynamicHandler中提出自己的异常
请参阅此页面以了解webapp2异常处理
https://webapp-improved.appspot.com/guide/exceptions.html
作为一个建议,我不会像上面的例子那样广泛/充满活力,但希望能帮助你做你想做的事。
欢呼声。
答案 1 :(得分:0)
由于我没有足够的声誉来评论,我正在使用答案来回答罗比的后续问题(应该单独询问)。在main.py中,特别是在:
中app = webapp2.WSGIApplication(
[
('/', HomeHandler),
('/stuff/', StuffHandler)
],
debug=True
)
此部分使用正则表达式,并在第一次匹配时退出。这是关于正则表达式的一个很好的,虽然简短的入门... Regex in 15 minutes 以下是关于URI routing in webapp2的一些很好的文档,最后,在上述文档中有一些关于异常处理的文档。
答案 2 :(得分:0)
Flask-FlatPages或多或少地做了你想要的,但实际上,你没有理由在App Engine上托管静态网站。