HTML页面加载,但显示为空白

时间:2014-03-01 20:38:41

标签: python html webapp2 jinja2

我正在使用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则没有。我不确定我在哪里出错了。我将不胜感激任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:0)

通过对评论者的评论,问题在于,当您在blog方法中定义render_front()时,它是一个局部变量,因此当方法返回时它会消失。尝试在BlogPost()方法中再次检索数据,并将其作为blog参数传递给self.render()。没有任何博客数据,模板确实会呈现为空。

因此,您更新的方法可能是:

class BlogPost(Handler):
    def get(self):
        blog = db.GqlQuery("SELECT * FROM Entry ORDER BY created DESC LIMIT 10")
        self.render("blogfront.html", blog=blog)

假设您要查看MainPage()中显示的相同数据,但您可能还需要其他内容。