0

Flask と mongoengine を使用して小さなアプリケーションを構築しています。

簡単なビューで私は持っています:

@app.route('/course/<slug>/', methods=['GET', 'POST'])
def course_detail(slug):
    course = Course.objects.get(slug=slug)


    return render_template(
        'course_detail.html',
        title='Course Detail -' + course.name,
        course=course,
   )

テンプレートでこのデータを反復したいのですが、そうすると:

{% for k, v in course %}{{ v }}{% endfor %}

私は得るValueError: too many values to unpack

また、値を合計したかった:

{{ course.values()|sum }}

これで私は得る:

UndefinedError: 'flask_mongoengine.BaseQuerySet object' has no attribute 'values'

では、mongoengine を使用して Flask でクエリセットを反復処理するにはどうすればよいでしょうか?

4

1 に答える 1

1

Course.objects.get(slug=slug)返却書類がない場合dictionary。したがって、すべてのオブジェクト フィールドを取得するには、次を使用します。

{% for field in course %}{{ course[field] }}{% endfor %}

返されるフィールド名がありBaseDocument.__iter__()、jinja2 で値を取得しますcourse[field]

ただし、例外ハンドラがない場合は、Course.objects(slug=slug).first()代わりに使用することをお勧めします。Course.objects.get(slug=slug)MultipleObjectsReturnedDoesNotExist

数値のイテラブルを使用する組み込み関数を使用sumしているため、フィルターを使用できませんが、フィールド名を返します。だからあなたはできる:sumBaseDocument.__iter__()

  1. 合計を取得してテンプレートに渡します。
  2. 独自の jinja2 フィルターを作成します。
  3. フィールドの合計を返すドキュメント定義の特別なメソッドを追加します。
  4. sum数値フィールド リストを再実行し、フィルターを使用するドキュメント定義の特別なメソッドを追加します。

コースの反復可能なオブジェクトを取得したい場合は、 use を使用してCourse.objects(slug=slug)ください。

于 2013-05-09T18:40:15.937 に答える