0

我正在尝试将 python 文件制作成 python 和 html 文件。我拥有的代码基本上来自 python 留言簿示例,但我希望有一个 html 文件为使用浏览器提供服务。我现在的代码可以使用,但是当我在底部添加 javascript 时出现错误此代码位于 ceemee11111.appspot.com

import cgi
import datetime
import urllib
import webapp2

from google.appengine.ext import db
from google.appengine.api import users


class Greeting(db.Model):
  """Models an individual Guestbook entry with an author, content, and date."""
  author = db.StringProperty()
  content = db.StringProperty(multiline=True)
  content2 = db.StringProperty(multiline=True)
  date = db.DateTimeProperty(auto_now_add=True)


def guestbook_key(guestbook_name=None):
  """Constructs a Datastore key for a Guestbook entity with guestbook_name."""
  return db.Key.from_path('Guestbook', guestbook_name or 'default_guestbook')


class MainPage(webapp2.RequestHandler):
  def get(self):
    self.response.out.write('<html><body>')
    guestbook_name=self.request.get('guestbook_name')


    greetings = db.GqlQuery("SELECT * "
                        "FROM Greeting "
                        "WHERE ANCESTOR IS :1 "
                        "ORDER BY date DESC LIMIT 3",
                        guestbook_key(guestbook_name))


    self.response.out.write("""
      <form action="/sign?%s" method="post">
        <div id="container" style="width:800px">

        <div id="header" style="background-color:#FFA500;">
        <h1 style="margin-bttom:0;">Main Title</h1></div>

        <div id="Con0" style="background-color:#FFD700;
   height:200px;width:200px;float:left;">
         <b>Menu</b><br>
         HTML<br>
         CSS<br>
         <p id="demo1"></p><br>
         JavaScript</div>

       <div id="content" style="background-color:#EEEEEE;height:200px;width:600px;float:left;">
Content goes here</div>
      </div>
      <button onclick="myFunction()">Try it</button>
      </form>
    </body>
  </html>""") 


self.response.out.write("""
      <form action="/sign?%s" method="post">
       <div id="dataImput"
        <div><textarea name="content" rows="1" cols="10"></textarea></div>
        <div><textarea name="content2" rows="1" cols="10"></textarea></div>
        <div><input type="submit" value="Sign Guestbook"></div>
      </div>
      </form>
      <hr>
      <form>Guestbook name: <input value="%s" name="guestbook_name">
      <input type="submit" value="switch"></form>
    </body>
  </html>""" % (urllib.urlencode({'guestbook_name': guestbook_name}),
                      cgi.escape(guestbook_name)))


class Guestbook(webapp2.RequestHandler):
  def post(self):
    # We set the same parent key on the 'Greeting' to ensure each greeting is in
    # the same entity group. Queries across the single entity group will be
    # consistent. However, the write rate to a single entity group should
    # be limited to ~1/second.
    guestbook_name = self.request.get('guestbook_name')
    greeting = Greeting(parent=guestbook_key(guestbook_name))

    if users.get_current_user():
      greeting.author = users.get_current_user().nickname()

greeting.content = self.request.get('content')
greeting.content2 = self.request.get('content2')
greeting.put()
self.redirect('/?' + urllib.urlencode({'guestbook_name': guestbook_name}))


app = webapp2.WSGIApplication([('/', MainPage),
                           ('/sign', Guestbook)],
                          debug=True)

#<script>
#function myFunction()
#{
#document.getElementById("demo1").innerHTML="test";
#}

感谢您的时间。担

4

2 回答 2

1

我认为您的代码将真正受益于将 HTML 与 Python 代码分开。

您可以通过编写 html 模板并使用 jinja2(google appengine 附带)来生成 html。这里有关于如何做到这一点的说明。JavaScript 将进入 HTML 模板,而不是 Python 代码。

于 2012-12-04T19:44:25.600 回答
1

鉴于您显然在使用 GAE,此处概述了您要执行的操作。

首先,将您的 html 移动到单独的文件中。我们将从奇怪的自由浮动的 html 开始self.response.out.write

"""
      <form action="/sign?%s" method="post">
       <div id="dataImput"
        <div><textarea name="content" rows="1" cols="10"></textarea></div>
        <div><textarea name="content2" rows="1" cols="10"></textarea></div>
        <div><input type="submit" value="Sign Guestbook"></div>
      </div>
      </form>
      <hr>
      <form>Guestbook name: <input value="%s" name="guestbook_name">
      <input type="submit" value="switch"></form>
    </body>
  </html>""" % (urllib.urlencode({'guestbook_name': guestbook_name}),
                      cgi.escape(guestbook_name))

这属于一个单独的文件,我们将调用myhtml.html. 其次,我们将使用 Django 模板系统而不是%sPython 字符串格式化。所以首先,我们将%s用 包围的模板友好字段替换{{ }},给我们:

"""
      <form action="/sign?{{ guestbook_name }}" method="post">
       <div id="dataImput"
        <div><textarea name="content" rows="1" cols="10"></textarea></div>
        <div><textarea name="content2" rows="1" cols="10"></textarea></div>
        <div><input type="submit" value="Sign Guestbook"></div>
      </div>
      </form>
      <hr>
      <form>Guestbook name: <input value="{{ guestbook_name|escape }}" name="guestbook_name">
      <input type="submit" value="switch"></form>
    </body>
  </html>"""

请注意,我们能够使用escape 模板过滤器(在 之后出现|)来转义我们从中获取的值guestbook_name

最后,我们加载 html 并将我们需要的参数传递给它:

self.response.out.write(template.render('myhtml.html', {'guestbook_name': guestbook_name}))
于 2012-12-04T20:43:21.733 回答