【问题标题】:HTML Page Loads, but shows up blankHTML 页面加载,但显示为空白
【发布时间】: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


【解决方案1】:

您的 cmets 向提问者提问,当您在 render_front() 方法中定义 blog 时,它是一个局部变量,因此当方法返回时它会消失。尝试在您的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() 中显示的相同数据,但您可能还想要其他内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 2017-10-01
    相关资源
    最近更新 更多