2017-01-19 7 views
1

Имея это для Настой:Колба и MongoDB - Для Loop не работает

example = mongo.db.example 
got_name = example.find({'name':1}) 
got_lastname = example.find({'lastname':1}) 

details = {'name' : got_name, 'lastname' : got_lastname} 

return render_template('blabla.html', details=details) 

Затем цикл с использованием дзиндзя в моем HTML (желая, чтобы это было таблица):

{% for x in details} 
<tr> 
    <td>{{ x.['name'] }}</td> 
    <td>{{ x.['lastname'] }}</td> 
</tr> 
{% endfor %} 

Но не будет работать, он ничего не отображает в моей таблице. Я написал этот пример выше, но мой код похож.

ответ

1

Вы можете использовать find_one() вместо find(), которая возвращает курсор к документам, которые соответствуют критериям. find_one() возвращает один документ, который затем может быть использован в словаре, вместо курсора:

example = mongo.db.example 
doc = example.find_one() 

details = { 'name' : doc['name'], 'lastname' : doc['lastname'] } 

return render_template('blabla.html', details=details) 

Или

example = mongo.db.example 
details = example.find_one({}, {'name':1, 'lastname':1}) 

return render_template('blabla.html', details=details) 

И ваш шаблон будет

<tr> 
    <td>{{ details['name'] }}</td> 
    <td>{{ details['lastname'] }}</td> 
</tr> 

Если вы хотите итерировать всю коллекцию и ret urn список, если документы с полями name и lastname, то вы должны использовать метод find(). Если у вас есть относительно небольшой набор данных, следующий код будет конвертировать весь результирующий набор (Cursor) в список (все втягивается в памяти):

example = mongo.db.example 
details = list(example.find({}, {'name': 1, 'lastname': 1})) 

return render_template('blabla.html', details=details) 

Затем перебирать список в шаблоне

{% for doc in details} 
<tr> 
    <td>{{ doc['name'] }}</td> 
    <td>{{ doc['lastname'] }}</td> 
</tr> 
{% endfor %} 
+0

Все работает нормально, но затем я попытался выполнить итерацию с помощью вашего метода. Я 'details = list (bans.find ({}, {'Nume codat': 1, 'SteamID': 1, 'Motiv': 1}))', затем ' {{x. ['Нуме-код ']}} ', но я получаю« TemplateSyntaxError: ожидаемое имя или номер »@' {{x. [' Nume codat '}}} '. Спасибо за ответ, хотя! – nori

+0

Странно, работает, если я удалю точку, например. '{{x. ['bla']}}' не так, но '{{x ['blabla'}}}' работает. Должно ли это работать или что-то сделано неправильно с вашей стороны? – nori

+0

Плохо, это была опечатка с вашей стороны, я не смог исправить ответ. Я обновил ответ, чтобы отразить правильный подход. – chridam

0

Ваш шаблон не будет на самом деле должны быть больше, как это:

<tr> 
    <td>{{ details['name'] }}</td> 
    <td>{{ details['lastname'] }}</td> 
</tr> 

петель.

Если у вас есть набор словарей, вы можете использовать свой первоначальный шаблон.

Смежные вопросы