【问题标题】:Converting '[Arrray]' into just the array in jinja 2?将 '[Array]' 转换为 jinja2 中的数组?
【发布时间】:2020-07-23 05:42:22
【问题描述】:

我需要将数组字符串更改为 jinja2 中的数组。这是我的 sql alchemy 数据库模型:

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 中使用,因为它会给出错误。如何将字符串数组更改为直接数组,以便在 jinja2 中进行循环?

我需要更改我的数据库逻辑还是我做错了什么?

【问题讨论】:

    标签: python arrays sqlite flask jinja2


    【解决方案1】:

    您可以使用 JSON serialization/deserialization。

    序列化(从数组到字符串)

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

    反序列化(从字符串到数组)

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

    编辑

    要回答您关于如何在 jinja 中使用它的问题,一种解决方案是向模型添加一个属性,以反序列化 categories 属性,如下所示:

    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 的一个实例).

    【讨论】:

    • 我就是这样做的,首先序列化数组,然后将其作为字符串存储在数据库中。但是,如果我试图在 html 中显示所有电影,我使用 Film.query.all() 查询数据库并将其直接传递给 jinja2。我怎样才能事先反序列化它?
    • @stackoverflow.com/users/6682251/ilko1810我编辑了答案以给出解决方案
    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 2023-03-19
    • 2013-01-23
    • 2012-05-25
    • 2022-07-14
    • 2012-04-09
    • 2015-01-09
    • 2019-07-12
    相关资源
    最近更新 更多