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。基本上
定义一个method用来做数值到string的转换
将其加入到
app.jinja_env.filters
在template里面使用
|filter
语法