【问题标题】:GqlQuery Results Only for Session?仅针对会话的 GqlQuery 结果?
【发布时间】:2012-06-19 22:04:22
【问题描述】:

我的应用程序、数据存储区、webapp2 和特定于表单的“响应”都在工作 :) 但我需要加载页面而不显示以前访问者的查询结果。在他们提交表单后,我只需要当前表单提交者的查询结果。这是一个会话或标题解决方案,还是我可以编辑 GqlQuery 来完成这个?

messages = db.GqlQuery("SELECT * "
                                "FROM Visitor " 
                                "ORDER BY date DESC LIMIT 1") #obviously shows previous form submit
        for message in messages:
            if message.name == "" or message.mood == "":
                self.response.out.write("<div class='textright'>Type name and select.</div>")
                self.response.out.write("</body></html>")
            elif message.mood == "bad" and message.name != "":
                self.response.out.write("<body><html>")
                self.response.out.write("<div class='textright'>Stay the course  

^ ^ 最后一部分是我的“回复”,只有在当前访问者提交表单后才会出现。

【问题讨论】:

  • 我不知道您是如何从我之前的回答中得知“使用模板”是让您保持在同一页面上的解决方案。这根本不是我说的。
  • 如果您遇到语法错误,您需要向我们展示堆栈跟踪以及导致它的代码。
  • Nick,你能看看我上面修改过的代码吗?

标签: google-app-engine gql gqlquery


【解决方案1】:

我强烈建议您阅读Getting Started,尤其是templates 部分,直到您了解它的工作原理。

但是如果你只是想看看你的例子,试试这个 (read more):

class Process(webapp.RequestHandler):
  def post(self):
    name = self.request.get("name")
    mood = self.request.get("mood")

    if mood == "bad" and name != "": 
      self.response.out.write("<html><body>")
      self.response.out.write("<h1>Welcome to the Internet!</h1>")
      self.response.out.write("<p>My mood is %s and my name is %s</p>" % (mood, name))
      self.response.out.write("</body></html>")
    else:
      self.response.out.write("<html><body>")
      self.response.out.write("<h1>Welcome to the Internet anyway!</h1>")
      self.response.out.write("</body></html>")

也不要在您的 GAE 应用程序中使用 print,而是使用 logger 进行调试等。

【讨论】:

  • Lipis,感谢您提供代码和链接。我想我很接近。我的印象是 print 是针对非类 .py 脚本的,而 s.r.o.w.是上课吗? GAE/API 空间中有很多页面,有人链接到确切的文档会有所帮助。
  • 上面的代码与在数据存储中应用东西无关。你必须阅读入门至少两次。阅读每个部分goo.gl/rRucs
  • @pavl 将其更改为/process/,最后加上正斜杠...因为您的&lt;form&gt; 中很可能有action=".",而不是完整的网址...
  • @pavl 我认为尝试“仅仅”让它发挥作用是没有意义的。你必须准确地理解什么是什么。什么是数据存储,表单如何工作,POST 请求是什么,GET 请求是什么以及表单中的操作是什么……您在同一个问题中涉及到许多不同的领域,并且很难理解这个问题。 !确保您从头开始..至少两次..
  • 谢谢,我已经复制了两个留言簿示例,包括 jinja 模板……现在我将尝试将概念应用到我的脚本中。会回来报告的。
【解决方案2】:

如果您想为调试目的发出值,特别是如果您希望在写入 &lt;html&gt; 标记之前发出值,请尝试

self.response.out.write("<!-- name: %s -->" % self.request.get("name"))

否则,浏览器可能会混淆。

来自处理程序的print 永远不会达到您的预期。

在您的 sn-p 中,您没有显示 var7var9 的来源。

我确实意识到 post/.put 表单值到 Datastore 会自动将用户重定向到新页面

我想你误会了。您还没有向我们展示您的代码在哪里执行put() 或重定向。 post() 处理程序也不会自动执行。

你在看哪个教程?也许我们需要收紧模糊的措辞。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2017-02-25
    相关资源
    最近更新 更多