2013-05-08 5 views
0

Я создаю небольшое приложение с флягой и монгонгензином.Флажок 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' 

Так как я должен перебрать querysets в термос с mongoengine?

Любая помощь очень ценится.

ответ

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), если у вас не было MultipleObjectsReturned и DoesNotExist исключений обработчиков.

Вы не можете использовать фильтр sum, потому что он использует встроенную функцию sum, которая использует итерабельность чисел, но BaseDocument.__iter__() возвращает имена полей. Вы можете:

  1. получить сумму и передать ее в шаблон.
  2. написать собственный фильтр jinja2;
  3. добавьте специальный метод определения вашего документа, который будет возвращать сумму полей;
  4. добавить специальный метод для определения вашего документа, который будет отображать список номеров номеров и использовать фильтр sum;

Если вы хотите получить итерируемый объект курсов, используйте только Course.objects(slug=slug).

+0

Спасибо! Вы предоставили мне много информации для изучения, когда я познакомился как с Flask, так и с MongoEngine. Очень полезно. –

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