Преобразование '[Arrray]' в массив в jinja 2? - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно изменить строку массива на массив в jinja2. Это моя sql модель базы данных алхимии:

class Film(db.Model): 
  id = db.Column(db.Integer, primary_key = True)
  images = db.Column(db.String(200))
  film-name = db.Column(db.String(100), nullable = False)
  categories = db.Column(db.String(200), nullable = False)
  director = db.Column(db.String(200), nullable = False)

Я храню строковый массив в категориях и мне нужен доступ к нему в jinja2. Массив выглядит так: '['action','family','comedy']'

Я пробовал literal_eval(), однако это не может быть использовано в jinja2, поскольку выдает ошибку. Как я могу изменить массив строк на прямой массив, чтобы я мог для l oop это в jinja2?

Нужно ли мне изменить логи базы данных c или я что-то не так делаю?

1 Ответ

0 голосов
/ 10 апреля 2020

Вы можете использовать JSON сериализация / десериализация.

сериализация (из массива в строку) :

categories = ['action', 'family', 'comedy']
f = Film(categories=json.dumps(categories)) # '["action", "family", "comedy"]'

десериализация (из строки в массив) :

json.loads(f.categories) # ['action', 'family', 'comedy']

edit

Чтобы ответить на ваш вопрос о том, как использовать его в jinja, одним из решений было бы добавить свойство к Модель, которая десериализует атрибуты категорий следующим образом:

class Film(db.Model): 
    id = db.Column(db.Integer, primary_key = True)
    images = db.Column(db.String(200))
    film-name = db.Column(db.String(100), nullable = False)
    categories = db.Column(db.String(200), nullable = False)
    director = db.Column(db.String(200), nullable = False)

    @property
    def categories_as_list(self):
        if self.categories:
            return json.loads(self.categories)
        return []

В шаблоне: {{ f.categories_as_list }} (при условии, что f является экземпляром Film) .

...