javascript - 如何将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?
解决方案
有几件事:
my_data
您提供给的地方是非空的吗render_template
?数据的结构是什么?todo["q"]
模板中的值是什么?是数字还是字符串?如果是后者,您需要在推入 JavaScript 数组之前将其用引号括起来。- 您在 中缺少括号
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))
推荐阅读
- flutter - 自动完成/智能感知不适用于 VSCode 中的 dart/flutter
- nsubstitute - 使用 NSubstitute 和 NCrunch 的 RedundantArgumentMatcherException
- windows - win32 硬链接和进程名称
- javascript - 为什么 history.pushState() 会破坏我的导航功能?
- c# - ICollectionView ui 未更新
- c# - 使用 SimpleHttpServer 的 C#/.NET 应用程序不向浏览器返回响应?
- java - 尝试使用 ConfigFactory.parseString 时未找到密钥“conf”的配置设置
- mips - mips传统5阶段cpu设计时关于字节顺序的问题
- php - 如何解决require_once中的致命错误
- javascript - “你需要合适的加载器”,使用 react native 和 expo。应用程序无法在 web 上编译,但在 android 上运行