error La propiedad% s no es multilínea

Mi aplicación está recibiendo un error debido a %s (al menos, esto es lo que creo), pero no sé por qué. He cambiado al código django para intentar obtener datos en la plantilla html. La plantilla se está cargando pero los datos no se están importando. La aplicación se ejecuta localmente pero la plantilla no está cargando datos y en el servidor me aparece este error:

 Traceback (most recent call last): File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1536, in __call__ rv = self.handle_exception(request, response, e) File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1530, in __call__ rv = self.router.dispatch(request, response) File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher return route.handler_adapter(request, response) File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 1102, in __call__ return handler.dispatch() File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 572, in dispatch return self.handle_exception(e, self.app.debug) File "/base/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.1/webapp2.py", line 570, in dispatch return method(*args, **kwargs) File "/base/data/home/apps/s~ceemee11111/1.363684484611202021/helloworld.py", line 37, in get for greeting in greetings: File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 2314, in next return self.__model_class.from_entity(self.__iterator.next()) File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 1442, in from_entity return cls(None, _from_entity=entity, **entity_values) File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 974, in __init__ prop.__set__(self, value) File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 614, in __set__ value = self.validate(value) File "/base/python27_runtime/python27_lib/versions/1/google/appengine/ext/db/__init__.py", line 2823, in validate raise BadValueError('Property %s is not multi-line' % self.name) BadValueError: Property content is not multi-line 

helloworld.py:

 import cgi import datetime import urllib import webapp2 import os from google.appengine.ext import db from google.appengine.api import users from google.appengine.ext.webapp import template class Greeting(db.Model): """Models an individual Guestbook entry with an author, content, and date.""" author = db.StringProperty() content = db.StringProperty(multiline=False) content2 = db.StringProperty(multiline=False) 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('') guestbook_name=self.request.get('guestbook_name') greetings = db.GqlQuery("SELECT * " "FROM Greeting " "WHERE ANCESTOR IS :1 " "ORDER BY date DESC LIMIT 10", guestbook_key(guestbook_name)) for greeting in greetings: if greeting.author: self.response.out.write( '%s wrote:' % greeting.author) else: self.response.out.write('An anonymous person wrote:') self.response.out.write(template.render('myhtml.html', {'guestbook_name': guestbook_name})) class Guestbook(webapp2.RequestHandler): def post(self): 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.put() self.redirect('/?' + urllib.urlencode({'guestbook_name': guestbook_name})) app = webapp2.WSGIApplication([('/', MainPage), ('/sign', Guestbook)], debug=True) 

myhtml.html:

     
<input type="text" name="content"
<input type="text" name="content2"
document.write("

This is heading

");
Guestbook name:

No sé nada sobre el motor de la aplicación de Google (pero sé django). Parece que hay un conflicto entre los tipos que está utilizando en su modelo y los tipos de formulario que está utilizando en su plantilla:

clase StringProperty (verbo_nombre = Ninguno, multilínea = Falso, …)

Si la multilínea es False, el valor no puede incluir caracteres de salto de línea. La biblioteca djangoforms usa esto para imponer una diferencia entre los campos de texto y los campos de área de texto en el modelo de datos, y otros pueden usarlo para un propósito similar.

La línea de error real del rastreo que es significativa es:

 BadValueError: Property content is not multi-line 

“contenido” se refiere a su propiedad modelo.

Para mí, eso indica que necesitas hacer una de las siguientes opciones …

1) Cambie su modelo para aceptar valores multilínea que se envían desde los campos de formulario de área de texto:

 class Greeting(db.Model): ... content = db.StringProperty(multiline=True) content2 = db.StringProperty(multiline=True) ... 

2) O cambie sus campos de formulario de área de texto para que sean campos de texto en su plantilla:

  

No sé exactamente cómo solucioné esto, pero este código funciona porque en el error desapareció. Estoy publicando esto para cualquier persona como información sobre el error% s solo porque la plantilla aún no funciona

Dan

 import cgi import datetime import urllib import webapp2 import os from google.appengine.ext import db from google.appengine.api import users from google.appengine.ext.webapp import template 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('') guestbook_name=self.request.get('guestbook_name') greetings = db.GqlQuery("SELECT * " "FROM Greeting " "WHERE ANCESTOR IS :1 " "ORDER BY date DESC LIMIT 10", guestbook_key(guestbook_name)) for greeting in greetings: if greeting.author: self.response.out.write(greeting.author) else: self.response.out.write('An anonymous person wrote:') self.response.out.write(template.render('myhtml.html', {'guestbook_name': guestbook_name})) class Guestbook(webapp2.RequestHandler): def post(self): 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.put() self.redirect('/?' + urllib.urlencode({'guestbook_name': guestbook_name})) app = webapp2.WSGIApplication([('/', MainPage), ('/sign', Guestbook)], debug=True) 

el código myhtml.html:

    

Este es un código que funciona para cargar la plantilla (solo para información). Gracias a todos por llevarme a este punto en la encoding Django / Python. ¡No podría haberlo hecho sin ti!

 import cgi import datetime import urllib import webapp2 import os from google.appengine.ext import db from google.appengine.api import users from google.appengine.ext.webapp import template 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): guestbook_name=self.request.get('guestbook_name') greetings_query = Greeting.all().ancestor( guestbook_key(guestbook_name)).order('-date') greetings = greetings_query.fetch(3) if users.get_current_user(): url = users.create_logout_url(self.request.uri) url_linktext = 'Logout' else: url = users.create_login_url(self.request.uri) url_linktext = 'Login' template_values = { 'greetings': greetings, 'url': url, 'url_linktext': url_linktext, } path = os.path.join(os.path.dirname(__file__), 'index.html') self.response.out.write(template.render(path, template_values)) class Guestbook(webapp2.RequestHandler): def post(self): 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.put() self.redirect('/?' + urllib.urlencode({'guestbook_name': guestbook_name})) app = webapp2.WSGIApplication([('/', MainPage), ('/sign', Guestbook)], debug=True) 

y el código index.html:

    {% for greeting in greetings %} {% if greeting.author %} {{ greeting.author }} wrote: {% else %} An anonymous person wrote: {% endif %} 
{{ greeting.content|escape }}
{% endfor %}
{{ url_linktext }}

Tuve el mismo problema, cambia esas líneas:

 content = db.StringProperty(multiline=True) content2 = db.StringProperty(multiline=True) 

para aquellos

 content = db.TextProperty() content2 = db.TextProperty()