【发布时间】:2014-03-01 20:38:41
【问题描述】:
我正在使用 Python 开发一个项目,并且我有一部分项目正在运行(用户提交帖子的地方)。我正在努力做到这一点,以便当用户提交他们的条目时,他们会被重定向到另一个页面,该页面显示他们发布的所有内容。当我测试这个时,我被重定向到我创建的新页面,但页面是空白的。这是我的代码:
class Handler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def render_str(self, template, **params):
t = jinja_env.get_template(template)
return t.render(params)
def render(self, template, **kw):
self.write(self.render_str(template, **kw))
class Entry(db.Model):
subject = db.StringProperty(required=True)
entry = db.TextProperty(required=True)
created = db.DateTimeProperty(auto_now_add = True)
class MainPage(Handler):
def render_front(self, subject="", entry="", error=""):
blog = db.GqlQuery("SELECT * FROM Entry ORDER BY created DESC LIMIT 10")
self.render("entry.html", subject=subject, entry=entry, error=error, blog=blog)
def get(self):
self.render_front()
def post(self):
subject = self.request.get("subject")
entry = self.request.get("entry")
if subject and entry:
e = Entry(subject = subject, entry=entry)
e.put()
self.redirect("/BlogPost")
else:
error = "To post a new entry, you must add both, a subject and your post"
self.render_front(subject, entry, error)
class BlogPost(Handler):
def get(self):
self.render("blogfront.html")
app = webapp2.WSGIApplication([('/', MainPage), ('/BlogPost', BlogPost)], debug = True)
这只是我的一段代码(我相信错误就在这些地方,因为我的首页正常工作)。
这是我的 blogfront.html:
<!DOCTYPE html>
<html>
<head>
<title>Blog </title>
</head>
<body>
{% for entry in blog %}
<div class="entry">
<div class="entry-subject">{{entry.subject}}</div>
<label>{{entry.created}}</label>
<hr>
<pre class="entry-body">{{entry.entry}}</pre>
</div>
{% endfor %}
</body>
</html>
entry.html 正在加载,而 blogfront.html 没有。我不确定我哪里出了问题。我将不胜感激任何帮助。提前致谢。
【问题讨论】:
-
这里的
Handler是什么?我不认为默认的webapp2.BaseHandler类有这种方法。大概你正在渲染其中的 Jinja 模板并将其写入self.response? -
而且大概需要将
blog对象传入模板;blog = db.GqlQuery("SELECT * FROM Entry ORDER BY created DESC LIMIT 10")和self.render('blogfront.html', blog=blog). -
Handler是我编写的一个类,用于处理模板渲染。它将webapp2.BaseHandler作为参数。例如,在我的 MainPage 类中,self.render是在呈现给定模板的 Handler 类中创建的方法。 -
您可能希望将其包含在您的问题中,以便我们诊断其中发生的情况。
BlogPost(Handler)类是不够的。 -
如果我执行
self.render('blogfront.html', blog=blog),我会收到一个内部服务器错误,上面写着NameError: global name 'blog' is not defined
标签: python html webapp2 jinja2