在以下示例中,.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
文件包含一个用户可以填写并发送给我的表单。
答案 0 :(得分:3)
jinja2为您提供了一种体面且简单的方式为用户提供动态内容:如果您需要动态内容,我建议使用此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