2017-01-19 4 views
1

를 작동하지 않는 경우 :플라스크 및 MongoDB를 - 루프 영약이를 갖는

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 만약 namelastname 필드를 가진 문서라면 목록을 작성한 다음 find() 메소드를 사용해야합니다. 당신이 상대적으로 작은 데이터 세트가있는 경우 , 다음 코드는 (모든 메모리에 당겨) 목록에 전체 결과 집합 (커서)를 변환합니다 :

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. [ 'Nume codat ']}}'하지만 TemplateSyntaxError : 예상 이름 또는 숫자가 "@' {{x. ['Nume codat ']}}'입니다. 그래도 답장을 보내 주셔서 감사합니다! – nori

+0

이상한, 내가 점을 삭제하면 작동합니다, 예. '{{x. [ 'bla']}}'틀렸지 만'{{x [ 'blabla']}}'는 작동합니다. 그것은 효과가 있어야합니까 또는 당신의 편이 잘못한 것이 었습니까? – nori

+0

내 잘못, 그 부분에 오타가 내 대답을주는 데 실패했습니다. 정확한 접근법을 반영하기 위해 답변을 업데이트했습니다. – chridam

0

템플릿이 실제로 더 이런 일 필요는 없을 것입니다 :

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

없음 루프를.

사전 배열이있는 경우 초기 템플릿을 사용할 수 있습니다.