首页 > 解决方案 > 如何将mongodb返回值传递给javascript数组?

问题描述

我正在使用烧瓶来呈现 html 模板。我想将 pymongo 查询返回的所有项目存储到一个 java 脚本数组中。我创建了一个数组 c[],它首先是空的。我使用烧瓶的循环来遍历返回的项目pymongo 查询,我将其推送到数组 c。

我尝试了一些stackoverflow的答案,但它与我的问题的理解不符

我的 html 代码在这里:home.html

<html>
    <head>
        <title>ii</title>
  </head>
<script>
var c=[]
{% for todo in collection %}
c.push{{todo["q"]}};
{% endfor %}

</script>
</body>
</html>

我的烧瓶文件:-

from flask import Flask, render_template,json
from pymongo import MongoClient
from bson import json_util,ObjectId

app = Flask(__name__) 
mongo_object = MongoClient("localhost", 27017)
app.debug= True
db = mongo_object['test']
collection = db['myc']
@app.route('/')
def index():
    return render_template('home.html')


@app.route('/find',methods=['GET', 'POST']) 
def pymongo_data_display():
    my_data = collection.find()
    a1="active"
    return render_template('home.html',a1=a1,collection=my_data,t="hi",h="hoho")
    '''
    if not my_data:
        return 'no data'
    else:        
        return my_data
    '''

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

it gives nothing.But can anyone suggest what to do here?

标签: javascriptarraysmongodbflaskpymongo

解决方案


有几件事:

  1. my_data您提供给的地方是非空的吗render_template?数据的结构是什么?
  2. todo["q"]模板中的值是什么?是数字还是字符串?如果是后者,您需要在推入 JavaScript 数组之前将其用引号括起来。
  3. 您在 中缺少括号c.push{{todo["q"]}};

假设您需要在 JavaScript 数组中存储字符串列表(即,您需要先引用这些值,然后再将其推入数组)。然后你需要定义自定义过滤器来实现它。这是完整的示例:

import jinja2                                                                   

def quote(value):                                                               
    return '"{}"'.format(value)                                                 

env = jinja2.Environment()                                                      
env.filters['quote'] = quote                                                    


template = env.from_string("""                                                  
<script>                                                                        
var c = [];                                                                     
{% for item in data %}                                                          
    c.push({{ item.q|quote|safe }});                                            
{% endfor %}                                                                    
</script>                                                                       
""")                                                                            

data = [{'q': 1}, {'q': 2}, {'q': 3}]                                           
print(template.render(data=data))

推荐阅读