0
當我訪問/ admin/newpost我希望我的edit.html模板可以渲染並顯示我的表單域。相反,我得到一個沒有錯誤的空白頁面。但是,當我查看源代碼時,我看到以下內容。模板不能顯示GAE&Jinja2
<Template '/edit.html'>
所以不能疊加軌跡我沒有得到任何錯誤。
- GAE版本:1.7
- 的Windows 7 64位
- Jinja2的版本最新
- 蟒蛇2.7
我的代碼和模板都低於
這裏是我的代碼:
import os
import webapp2
import config
import jinja2
from google.appengine.ext import db
import fix_path
import config
import static
import wtforms
from wtforms.ext.appengine.db import model_form
from wtforms import Form, TextField, validators
def render_template(template_name, template_vals=None, theme=None):
template_path = os.path.join(os.path.dirname(__file__) , \
"themes", theme or config.theme)
env = jinja2.Environment(
loader=jinja2.FileSystemLoader(template_path))
return env.get_template(template_name, template_vals or {})
class BlogPost(db.Model):
#The URL path to the blog post. Posts have a path if they are published.
path = db.StringProperty()
title = db.StringProperty(required=True, indexed=False)
body = db.TextProperty(required=True)
published = db.DateTimeProperty(auto_now_add=True)
updated = db.DateTimeProperty(auto_now=True)
def render(self):
template_vals = {
'config': config,
'post': self,
}
return render_template("post.html", template_vals)
form = model_form(BlogPost, Form)
class PostForm(form):
pass
class PostHandler(webapp2.RequestHandler):
@webapp2.cached_property
def jinja2(self):
return jinja2.get_jinja2(app=self.app)
def render_to_response(
self,
template_name,
template_vals=None,
theme=None
):
template_name = "admin/%s" % template_name
self.response.out.write(render_template(
template_name, template_vals, theme))
def render_form(self, form):
self.render_to_response("edit.html", {'form': form})
def get(self):
self.render_form(PostForm())
app = webapp2.WSGIApplication([('/admin/newpost', PostHandler)],
debug=True)
這裏是我的模板:
{% extends "base.html" %}
{% block title %}Testing New Post Template{% endblock %}
{% block body %}
<form method="post" action="">
<table>
<div>{{ form.title.label }}: {{ form.title(class="css_class") }}</div>
{% if form.title.errors %}
<ul class="errors">{% for error in form.name.errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
<div>{{ form.body.label }}: {{ form.body() }}</div>
{% if form.body.errors %}
<ul class="errors">{% for error in form.body.errors %}<li>{{ error }}</li>{% endfor %}</ul>
{% endif %}
</table>
<input type="submit" />
</form>
{% endblock %}
我的app.yaml文件
application: cmwo-blog
version: 1
runtime: python27
api_version: 1
threadsafe: no
handlers:
- url: /admin/.*
script: admin.app
login: admin
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /static/([^/]+)/(.*)
static_files: themes/\1/static/\2
upload: themes/[^/]+/static/.*
- url: .*
script: static.app
builtins:
- remote_api: on
libraries:
- name: webapp2
version: "2.5.1"
- name: jinja2
version: latest
非常感謝。這似乎是問題。有一件事我不明白解決方案是return template.render(**(template_vals或{}))。這是做什麼的? – Busilinks 2012-07-29 16:47:27
你有什麼特別的問題? – 2012-07-29 18:57:46
我不理解渲染(**(部分,我假設這些就像關鍵字參數的通配符一樣,你可以告訴我是Python的新手,再次感謝您的幫助 – Busilinks 2012-07-30 12:01:19