Отобразить значение имени Enum cllass mamber, полученного из базы данных - PullRequest
1 голос
/ 13 марта 2019

У меня есть этот класс в моем models.py.

class Size(Enum):
    ONE = 1
    TWO = 2

И это в моей форме. Я хотел предопределенный выбор для этого поля, поэтому я использовал класс enum:

size = SelectField('Shoe size', choices=[(name, member.value) for name, member in ShoeSize.__members__.items()])

Значения, хранящиеся в базе данных, - ОДИН, ДВА ... при отображении в шаблоне jinja {{ shoe.size }}, имена членов - это то, что показано. Как я могу отобразить значения элементов в моем шаблоне jinja? Короче говоря, я хочу отображать 1, а не ONE. Функция repr для класса будет лучше.

Ответы [ 2 ]

2 голосов
/ 13 марта 2019

Вы можете рассказать вашему шаблону о своем классе:

from enum import Enum
from jinja2 import Template

class Size(Enum):
  ONE = 1
  TWO = 2

template = Template('{{ Size[db_value].value }} == {{ db_value }}')
template.globals['Size'] = Size

template.render(db_value='ONE')

Редактировать: Кто-то пометил это как дубликат, который я не понимаю, так как связанный ответ не отвечает на шаблонизирующий вопрос jinja2

0 голосов
/ 14 марта 2019

От @ booley1012 ответ, мне стало лучше. Все, что мне нужно было сделать, это сохранить значения, а не имена: Поэтому я импортировал класс Size в моем файле просмотра:

from app.models import Size

Затем в функции просмотра, которая выполняет сохранение:

shoe = Shoe(size = Size[form.size.data].value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...