如何在App Engine上使用Python加载.html页面

时间:2014-11-03 22:03:56

标签: python html google-app-engine webapp2

在以下示例中,.html数据与Python代码位于同一文件中(作为变量MAIN_PAGE_HTML)。

我希望.html内容位于不同的文件中。

如何呈现HTML页面?我必须始终使用Jinja2加载它吗?

或者是否有更简单的方法来获取.html的内容并将其传递给self.response.write

import cgi from google.appengine.api import users import webapp2

MAIN_PAGE_HTML = """\ <html>   <body>
    <form action="/sign" method="post">
      <div><textarea name="content" rows="3" cols="60"></textarea></div>
      <div><input type="submit" value="Sign Guestbook"></div>
    </form>   </body> </html> """

class MainPage(webapp2.RequestHandler):
    def get(self):
        self.response.write(MAIN_PAGE_HTML)

class Guestbook(webapp2.RequestHandler):
    def post(self):
        self.response.write('<html><body>You wrote:<pre>')
        self.response.write(cgi.escape(self.request.get('content')))
        self.response.write('</pre></body></html>')

application = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/sign', Guestbook), ], debug=True)

我的.html文件包含一个用户可以填写并发送给我的表单。

2 个答案:

答案 0 :(得分:3)

为您提供了一种体面且简单的方式为用户提供动态内容:如果您需要动态内容,我建议使用此approach

或者,如果您只需要静态内容,请使用static pages。 (请注意,StackOverflow上有关于如何执行此操作的帖子:例如:Serving static html in Google app engine Python

如果需要,您也可以动态加载自己的文件,但我认为这不是您问题的首选途径。

答案 1 :(得分:3)

Jinja2它是一个模板引擎,基本上是在客户端提供服务之前合并变量,但webapp2包含模板引擎本身

import webapp2
import os #added
from google.appengine.ext.webapp import template #also added

class MainPage(webapp2.RequestHandler):
    def get(self):
        path = os.path.join(os.path.dirname(__file__), 'templates/index.html') 
        self.response.out.write(template.render(path, {}))        

class Guestbook(webapp2.RequestHandler):
    def post(self): #didn't change this
        self.response.write('<html><body>You wrote:<pre>')
        self.response.write(cgi.escape(self.request.get('content')))
        self.response.write('</pre></body></html>')

application = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/sign', Guestbook), ], debug=True)

所以基本上你可以使用webapp2,jinja或others模板引擎,但开箱即用的app引擎只提供webapp2(django)和jinja2

提供静态文件(图像,js,css等)以及app.yaml文件中的处理程序部分

handlers:
- url: /images # in the html can access from localhost:8080/images
  static_dir: templates/images # folder template, subfolder images
- url: /js
  static_dir: templates/js  
- url: /css
  static_dir: templates/css  
- url: /fonts
  static_dir: templates/fonts  
- url: /assets
  static_dir: templates/assets  

根据这个yaml文件,这将是项目中的结构

-  MyAppFolder
-- Templates
---- images
---- js
---- css
---- fonts
---- assets