Как передать возвращаемые значения 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?
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
558
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Есть пара вещей:

  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))
Ответ принят как подходящий

Это работает:

home.html file:

<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 file:

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)

Другие вопросы по теме