2012-04-26 10 views
7

que estoy tratando de volver a mis mensajes, pero en cambio me salepymongo con el frasco

TypeError: 'Cursor' object is not callable.

¿Cómo puedo corregir esto? Aquí está mi código:

from flask import Flask 
from flask.ext.pymongo import PyMongo 
app = Flask(__name__) 
mongo = PyMongo(app) 
from pymongo import Connection 
connection = Connection() 
db = connection.test_database 
collection = db.test_collection 

@app.route('/') 
def home_page(): 
    post = {"author":"mike","text":"jiii"} 
    posts = db.posts 
    posts.insert(post) 
    return posts.find() 

if __name__=='__main__': 
    app.run(debug=True) 

Respuesta

10

find() devuelve un objeto Cursor que debe iterar sobre acceder a los documentos devueltos por la consulta. Como en:

for post in posts.find(): 
    # do something with post 
6

Cuando regresa algo de un manejador frasco debe ser uno de los siguientes tipos de cosas:

Cuando regresa el objeto PyMongo Cursor Frasco ve que no es una instancia de flask.Response (en realidad, flask.Flask.response_class) y no una tupla por lo que se supone que debe ser un objeto WSGI e intenta llamar (de ahí el error).

La mejor solución es utilizar flask.jsonfiy para devolver una respuesta JSON o create a template para representar las publicaciones y usar render_template para devolver la respuesta adecuada.

0

Las respuestas anteriores son correctas. Se espera que las vistas de los cuadros devuelvan algún tipo de respuesta HTTP. Por lo tanto, debe procesar los datos y responder, probablemente utilizando las funciones de utilidad de Flask. Además, el método find() devuelve un cursor que debe iterar en algún punto.

sólo tiene que cambiar la última línea de la vista:

@app.route('/') 
def home_page(): 
    post = {"author":"mike","text":"jiii"} 
    posts = db.posts 
    posts.insert(post) 
    return render_template(posts.find(), "index.html") 

y proporcionan una index.html que contiene algo como:

{% for post in posts %} 
<h2>Post by {{ post.author}}</h2> 
<p>{{ post.text }}</p> 
{% endfor %} 
0

Uso:

from flask_pymongo import Pymongo 

en lugar de :

from flask.ext.pymongo import PyMongo 
Cuestiones relacionadas