首页 > Flask 数值在渲染html时转为文字

Flask 数值在渲染html时转为文字

models.py

class Group(db.Model):
    __tablename__ = 'groups'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    level = db.Column(db.Integer)

views.py

@main.route('/index', methods=['GET', 'POST'])
def index():
    u = Group.query.all()
    return render_template('index.html', u=u)

index.html

{% for foo in u%}
    {{ u.id}}
    {{ u.name}}
    {{ u.level}}

可以看到Group表里Level是数字字段,因为我对于等级是这么设定的
1 = 普通
2 = 高级
3 = 超级
但在渲染html的时候,只能输出1,2,3 这些数字.
那么有什么办法在渲染过程中自动判断
数字 = 值 然后把值渲染到html呢?

我想要的效果

{% for foo in u %}
    {{u.id}} = 1
    {{u.name}} =username
    {{u.level}} = `普通` 而不是数字1    

class Group(db.Model):
    __tablename__ = 'groups'
    LEVEL = ((1, u'普通'),(2, u'高级'),(1, u'超级'))
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    level = db.Column(db.Integer, choices=LEVEL)
    
{% for foo in u%}
    {{ foo.id}}
    {{ foo.name}}
    {{ foo.get_level_display}}

可以使用jinja2 filter。基本上

  1. 定义一个method用来做数值到string的转换

  2. 将其加入到app.jinja_env.filters

  3. 在template里面使用|filter语法

【热门文章】
【热门文章】