我试图将<div>的大小传递回谷歌应用引擎(Python代码),但似乎无法使其工作</div>

时间:2013-07-04 12:05:57

标签: javascript python google-app-engine

如果我在这里真的很蠢,很多人道歉 - 我早上大部分时间都在寻找答案,但也许我在用错误的语言搜索。我正在使用Google App Engine,使用Python代码来设置我的webapp。我已设法使用以下HTML代码设置基本页面结构:

main_html = """
<HTML>
  <HEAD>
    <LINK rel="stylesheet" type="text/css" href="static/css/main.css">
  </HEAD>
  <BODY>
    <DIV class="wspace">
      <BR>
    </DIV>
    <DIV class="header">
      <FONT class="logoFont">Logo Text</font>
    </DIV>
    <DIV class="maincontainer">
      <DIV class="sidebar" id="leftsidebar">
        <SCRIPT>
          var lsCanWid = document.getElementsByTagName("div"["leftsidebar"].offsetWidth
          var lsCanHei = document.getElementsByTagName("div")["leftsidebar"].offsetHeight
        </SCRIPT> 
      </DIV>
      <DIV class="sidebar" id="rightsidebar">
        <SCRIPT>
          var rsCanWid = document.getElementsByTagName("div")["rightsidebar"].offsetWidth
          var rsCanHei = document.getElementsByTagName("div")["rightsidebar"].offsetHeight
        </SCRIPT>
      </DIV>
      <DIV class="mainscreen" id="mainscr">
        <SCRIPT>
          var mainCanWid = document.getElementsByTagName("div")["mainscr"].offsetWidth
          var mainCanHei = document.getElementsByTagName("div")["mainscr"].offsetHeight
        </SCRIPT>
        %(MAINCONTENT)s
      </DIV>
    </DIV>
    <DIV class="footer">
      Footer Text
    </DIV>
    <DIV class="wspace">
      <FONT class="crnotice">Copyright Notice Text</FONT>
    </DIV>
  </BODY>
</HTML>
"""

我测试了javascript变量,这些变量完全符合计划(例如lsCanWid返回左侧边栏宽度)。

然后我在Python中获得了以下代码:

class MainHandler(webapp2.RequestHandler):
    def get(self):
        lsCanWid = self.request.get('lsCanWid')
        lsCanHei = self.request.get('lsCanHei')
        rsCanWid = self.request.get('rsCanWid')
        rsCanHei = self.request.get('rsCanHei')
        mainCanWid = self.request.get('mainCanWid')
        mainCanHei = self.request.get('mainCanHei')
        temp_str = str(lsCanWid)
        self.response.write(main_html %{"MAINCONTENT": temp_str})

app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

我之前没有尝试过在“get”中使用self.request.get,所以我不确定这是不是问题。如果你用其他字符串替换temp_str,python代码工作正常,所以这不是我的问题所在。我真的很感激这里的任何帮助!

1 个答案:

答案 0 :(得分:2)

简而言之 - 您不是将这些值发送回处理程序,您需要将它们添加到查询字符串中或将其发回。

Javascript运行浏览器。页面在浏览器中呈现后,与后端代码无关。为了使您的Python代码能够从浏览器中了解任何内容,您必须将其发送回代码。这就是HTTP的工作原理。它是一个“请求/响应”周期,一旦响应(发送给浏览器的内容)完成,就没有连接。

因此,要将这些值发送回代码,您需要将它们作为查询字符串的一部分附加到请求中,例如/foo?lsCanWid=3&lsCanHei=4(等等)。您需要使用javascript构建此URL,然后将其添加到您必须单击的链接 - 然后,在下一个请求(一旦单击此新链接),您的Python代码将收到价值。