我正在使用flask渲染html模板。我想将pymongo查询返回的所有项目存储到Java脚本数组中。我创建了一个数组c [],该数组首先为空。并且我使用flask循环来遍历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?
答案 0 :(得分:1)
有几件事:
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))
答案 1 :(得分:1)
这有效:
home.html文件:
<html>
<head>
<title>ii</title>
<script>
function populateMyDiv(){
var ul=document.createElement('ul');
{% for name in collection %}
var li=document.createElement('li');
ul.appendChild(li);
li.innerHTML=li.innerHTML + "{{name}}";
{% endfor %}
document.getElementById("test").appendChild(ul);
}
</script>
</head>
<body onload="populateMyDiv()">
<div id="test"></div>
</body>
</html>
test.py文件:
from flask import Flask, render_template
from pymongo import MongoClient
import json
app = Flask(__name__)
mongo_obj=MongoClient("localhost", 27017)
@app.route('/')
def hello_world():
db = mongo_obj['your_database']
collection = db['your_collection']
temp = collection.find()
my_data = []
for x in temp:
my_data.append(x['name'])
return render_template('home.html',collection=my_data)