2013-06-11 2 views
0

Я пытаюсь создать базовое использование хранилища данных и модели db-приложений Google App Engine. Мой объект моделиСвойства модели хранилища данных Google App Engine не возвращаются

class Table(db.Model): 
    row = db.IntegerProperty() 
    col = db.IntegerProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

он будет использоваться, чтобы просто держать таблицу строк и столбцов. Пользователь вводит данные через html, а затем я сохраняю таблицу и рисую все таблицы в хранилище данных. Я использую Table.all(), чтобы получить все таблицы из хранилища данных, а затем попытаюсь получить доступ к их содержимому, чтобы я мог распечатать таблицу, но по какой-то причине, когда table.row и table.col читаются в for y in range(row):, по-видимому, возвратят noneType, кто-нибудь знает, почему ?

import webapp2 
from google.appengine.ext.webapp.util import run_wsgi_app 
from google.appengine.ext import db 
from logging import error 

INITIAL_INPUT = """\ 
<html> 
    <body> 
     <form action="/out?%s" method="POST"> 
      <input type="text" name="row" /> 
      <input type="text" name="col" /> 
      <input type="submit" value="Submit" /> 
     </form> 
    </body> 
</html> 
""" 

class Table(db.Model): 
    """Models an individual Guestbook entry with author, content, and date.""" 
    row = db.IntegerProperty() 
    col = db.IntegerProperty() 
    date = db.DateTimeProperty(auto_now_add=True) 

class MainPage(webapp2.RequestHandler): 
    def get(self): 
     self.response.write(INITIAL_INPUT) 

class Out(webapp2.RequestHandler): 

    def post(self): 
     newRow = self.request.POST['row'] 
     newCol = self.request.POST['col'] 
     newTable = Table() 
     newTable.row = int(newRow) if newRow else 1 
     newTable.col = int(newCol) if newCol else 1 
     newTable.put() 
     tables = Table.all() 
     for table in tables: 
      self.drawTable(table.row, table.col) 


    def drawTable(self, row , col): 
     write = self.response.write 
     write("<html><body><table>") 
     for y in range(row): 
      write("<tr>") 
      for x in range(col): 
       cell = "<td bgcolor=\"#00FF00\">" + str(x) + " " + str(y) + "</td>" 
       if x % 2 == 0: 
        cell = "<td bgcolor=\"#FF0000\">" + str(x) + " " + str(y) + "</td>" 
       write(cell) 
      write("</tr>")  
     write("</table></body></html>") 

application = webapp2.WSGIApplication([ 
    ('/', MainPage), 
    ('/out', Out)] 
, debug=True) 

def main(*args, **kwds): 
    run_wsgi_app(application) 


if __name__ == "__main__": 
    main() 
+1

Проверка существующих сущностей для таблицы. Похоже, что у вас есть хотя бы один (возможно, созданный ранее), который не имеет значения для 'row'. Вы можете установить 'required = True' свойства row и col. –

+0

Хо, я делаю то, что это просто db.IntegerProperty (обязательно = True)? – EasilyBaffled

+0

Да, это так. –

ответ

1

Примечание: <form action="/out?%s" неправильно, оно нужно только быть action="/out".

Готов поспорить, что у вас есть другие объекты в Table, поэтому ваша петля поднимает их. Используйте средство просмотра хранилища данных для просмотра By kind: Table и удалите те, у которых есть пустые строки, значения столбца.

Возможно, вы хотите только нарисовать таблицу, которая была ОТКРЫТА? Измените эти строки:

tables = Table.all() 
    for table in tables: 
     self.drawTable(table.row, table.col) 

к:

self.drawTable(newTable.row, newTable.col) 
+0

Почему '/ out?% S' не так ли? Я буду честным, я скопировал это из примера и не сосредоточился на нем. Кроме того, я хочу распечатать все таблицы. И наконец, как мне получить доступ к средству просмотра хранилища данных? – EasilyBaffled

+1

Обычно «% s» в строке является заполнителем для другой строки при использовании оператора%. Если вы хотите сделать пользовательское действие, это будет правильно. Так как ваше приложение использует «/ out» и метод POST, «% s» игнорируется (к счастью). –

+1

Чтобы получить доступ к средству просмотра хранилища данных, перейдите на страницу https://appengine.google.com/ и выберите свое приложение. Когда вы увидите панель инструментов, нажмите ссылку «Датель хранилища данных» в левой панели меню. –

Смежные вопросы