如何将喜欢的数字转换为百分比,Flask?
How to convert likes number to percents , Flask?
我有一个小问题,就是我想在管理面板里把客户的点赞数转换成百分比,最大浮点数是5.0所以他得到5星向下告诉0.0如果没有点赞。
这是我的model.py:
appointment_upvotes = db.Table('appointment_upvotes',
db.Column('appointment_id', db.Integer, db.ForeignKey('appointment.id')),
db.Column('rate_appo_id', db.Integer, db.ForeignKey('rate_appo.id'))
)
class Appointment(db.Model):
id = db.Column(db.Integer(), primary_key=True)
start_time = db.Column(db.Integer(), nullable=False)
end_time = db.Column(db.Integer(), nullable=False)
timezone = db.Column(db.String(TIMEZONE_LEN_MAX), nullable=False)
note = db.Column(db.String())
status = db.Column(db.Boolean(), default=False)
is_accepted = db.Column(db.Boolean(), default=False)
is_not_accepted = db.Column(db.Boolean(), default=True)
client_id = db.Column(db.Integer(), db.ForeignKey('client.id'))
user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
service_id = db.Column(db.Integer(), db.ForeignKey('service.id'))
rates = db.relationship('RateAppo', backref='appointment', lazy='dynamic')
class RateAppo(db.Model):
id = db.Column(db.Integer(), primary_key=True)
rate_punctuality = db.Column(db.Integer(), default=0)
rate_nonconf = db.Column(db.Integer(), default=0)
rate_solvency = db.Column(db.Integer(), default=0)
text = db.Column(db.Text(), default=None)
appo_id = db.Column(db.Integer(), db.ForeignKey('appointment.id'))
def __repr__(self):
return "Comment: {}".format(self.text)[0:15]
def has_voted(self, appointment_id):
select_votes = appointment_upvotes.select(
db.and_(
appointment_upvotes.c.appointment_id == appointment_id,
appointment_upvotes.c.rate_appo_id == self.id
)
)
rs = db.engine.execute(select_votes)
return False if rs.rowcount == 0 else True
def vote(self, appointment_id, typevote):
already_voted = self.has_voted(appointment_id)
vote_status = None
if not already_voted:
if typevote == 'rate_punctuality':
db.engine.execute(
appointment_upvotes.insert(),
appointment_id = appointment_id,
rate_appo_id = self.id
)
self.rate_punctuality = self.rate_punctuality + 1
vote_status = True
elif typevote == 'rate_nonconf':
db.engine.execute(
appointment_upvotes.insert(),
appointment_id = appointment_id,
rate_appo_id = self.id
)
self.rate_nonconf = self.rate_nonconf + 1
vote_status = True
else:
db.engine.execute(
appointment_upvotes.insert(),
appointment_id = appointment_id,
rate_appo_id = self.id
)
self.rate_solvency = self.rate_solvency + 1
vote_status = True
db.session.commit()
return vote_status
在管理面板中,费率将如下所示:
平均评分:4.5
不管他有多少个赞,假设他有 100 个赞,我不想按计数显示,只需要将值提高到 5.0 分
还有一件事我忘了提,也许在我的 jinja
模板中我可以让它工作??
这是一个例子:
准时:100 个赞 百分比可能会是 4.52
偿付能力:63 百分比可能是 3.23
所以在 Punctuality 中会有 4 颗星,在 Solvency 中会有 3 颗星,依此类推。
最后一件事是在一行中显示所有这些喜欢的完整统计数据,例如在我的面板中我会得到这样的东西:
click me to see an example
所以在我的模板中我可以输入如下内容:
<div class="col-sm-8"><h2>Average Rating: <strong> {{ "%.2f" % user.rate_appo.count }} </strong></h2>
<div class="table-responsive">
<table class="table table-striped text-center">
<thead>
<tr>
<th class="text-center">Punctuality</th>
<th class="text-center">Non-Conflict</th>
<th class="text-center">Solvency</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ "%.2f" % user.rate_appo.rate_punctuality.count}} </td>
<td>{{ "%.2f" % user.rate_appo.rate_nonconf.count}} </td>
<td>{{ "%.2f" % user.rate_appo.rate_solvency.count}} </td>
</tr>
</tbody>
</table>
</div>
我真的不确定我上面输入的内容,我使用 %.2f 只是为了简化示例,让大家更清楚。
最终,这是一个正在进行的项目,如有任何建议,我们将不胜感激 :)。
我无法找出您模型中的 "count of likes" 是哪个,但我认为您的问题是 "converting a number into another format in flask-Admin panel"。
如果是这样,这可能会有所帮助:
An example 个 自定义表单 - flask-Admin。它通过使用自定义模型视图将文件路径转换为 HTML 标记 <img>
。
这里是关键代码:
https://github.com/flask-admin/flask-admin/blob/master/examples/forms/app.py#L110
编辑:
假设有一个名为convertLikes
的python函数可以将点赞数转换为星星数,例如:convertLikes(100)
将return 4.52。然后定义为jinja2的过滤器,替换你的代码:
<td>{{ "%.2f" % user.rate_appo.rate_punctuality.count}} </td>
与:
<td>{{ user.rate_appo.rate_punctuality.count | convertLikes }} </td>
过滤器语法将调用 convertLikes(user.rate_appo.rate_punctuality.count)
和 return 星数到 <td>
标签中。
例如:
在python中定义一个过滤函数:
def convertLikes(count):
# do the convertion
return stars_number
在模板环境中注册:
app = Flask(__name__)
app.jinja_env.filters['convertLikes'] = convertLikes
在 jinja2 模板中使用它:
<td>{{ user.rate_appo.rate_punctuality.count | convertLikes }} </td>
我有一个小问题,就是我想在管理面板里把客户的点赞数转换成百分比,最大浮点数是5.0所以他得到5星向下告诉0.0如果没有点赞。
这是我的model.py:
appointment_upvotes = db.Table('appointment_upvotes',
db.Column('appointment_id', db.Integer, db.ForeignKey('appointment.id')),
db.Column('rate_appo_id', db.Integer, db.ForeignKey('rate_appo.id'))
)
class Appointment(db.Model):
id = db.Column(db.Integer(), primary_key=True)
start_time = db.Column(db.Integer(), nullable=False)
end_time = db.Column(db.Integer(), nullable=False)
timezone = db.Column(db.String(TIMEZONE_LEN_MAX), nullable=False)
note = db.Column(db.String())
status = db.Column(db.Boolean(), default=False)
is_accepted = db.Column(db.Boolean(), default=False)
is_not_accepted = db.Column(db.Boolean(), default=True)
client_id = db.Column(db.Integer(), db.ForeignKey('client.id'))
user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))
service_id = db.Column(db.Integer(), db.ForeignKey('service.id'))
rates = db.relationship('RateAppo', backref='appointment', lazy='dynamic')
class RateAppo(db.Model):
id = db.Column(db.Integer(), primary_key=True)
rate_punctuality = db.Column(db.Integer(), default=0)
rate_nonconf = db.Column(db.Integer(), default=0)
rate_solvency = db.Column(db.Integer(), default=0)
text = db.Column(db.Text(), default=None)
appo_id = db.Column(db.Integer(), db.ForeignKey('appointment.id'))
def __repr__(self):
return "Comment: {}".format(self.text)[0:15]
def has_voted(self, appointment_id):
select_votes = appointment_upvotes.select(
db.and_(
appointment_upvotes.c.appointment_id == appointment_id,
appointment_upvotes.c.rate_appo_id == self.id
)
)
rs = db.engine.execute(select_votes)
return False if rs.rowcount == 0 else True
def vote(self, appointment_id, typevote):
already_voted = self.has_voted(appointment_id)
vote_status = None
if not already_voted:
if typevote == 'rate_punctuality':
db.engine.execute(
appointment_upvotes.insert(),
appointment_id = appointment_id,
rate_appo_id = self.id
)
self.rate_punctuality = self.rate_punctuality + 1
vote_status = True
elif typevote == 'rate_nonconf':
db.engine.execute(
appointment_upvotes.insert(),
appointment_id = appointment_id,
rate_appo_id = self.id
)
self.rate_nonconf = self.rate_nonconf + 1
vote_status = True
else:
db.engine.execute(
appointment_upvotes.insert(),
appointment_id = appointment_id,
rate_appo_id = self.id
)
self.rate_solvency = self.rate_solvency + 1
vote_status = True
db.session.commit()
return vote_status
在管理面板中,费率将如下所示:
平均评分:4.5
不管他有多少个赞,假设他有 100 个赞,我不想按计数显示,只需要将值提高到 5.0 分
还有一件事我忘了提,也许在我的 jinja
模板中我可以让它工作??
这是一个例子:
准时:100 个赞 百分比可能会是 4.52
偿付能力:63 百分比可能是 3.23
所以在 Punctuality 中会有 4 颗星,在 Solvency 中会有 3 颗星,依此类推。
最后一件事是在一行中显示所有这些喜欢的完整统计数据,例如在我的面板中我会得到这样的东西:
click me to see an example
所以在我的模板中我可以输入如下内容:
<div class="col-sm-8"><h2>Average Rating: <strong> {{ "%.2f" % user.rate_appo.count }} </strong></h2>
<div class="table-responsive">
<table class="table table-striped text-center">
<thead>
<tr>
<th class="text-center">Punctuality</th>
<th class="text-center">Non-Conflict</th>
<th class="text-center">Solvency</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{ "%.2f" % user.rate_appo.rate_punctuality.count}} </td>
<td>{{ "%.2f" % user.rate_appo.rate_nonconf.count}} </td>
<td>{{ "%.2f" % user.rate_appo.rate_solvency.count}} </td>
</tr>
</tbody>
</table>
</div>
我真的不确定我上面输入的内容,我使用 %.2f 只是为了简化示例,让大家更清楚。
最终,这是一个正在进行的项目,如有任何建议,我们将不胜感激 :)。
我无法找出您模型中的 "count of likes" 是哪个,但我认为您的问题是 "converting a number into another format in flask-Admin panel"。
如果是这样,这可能会有所帮助:
An example 个 自定义表单 - flask-Admin。它通过使用自定义模型视图将文件路径转换为 HTML 标记 <img>
。
这里是关键代码:
https://github.com/flask-admin/flask-admin/blob/master/examples/forms/app.py#L110
编辑:
假设有一个名为convertLikes
的python函数可以将点赞数转换为星星数,例如:convertLikes(100)
将return 4.52。然后定义为jinja2的过滤器,替换你的代码:
<td>{{ "%.2f" % user.rate_appo.rate_punctuality.count}} </td>
与:
<td>{{ user.rate_appo.rate_punctuality.count | convertLikes }} </td>
过滤器语法将调用 convertLikes(user.rate_appo.rate_punctuality.count)
和 return 星数到 <td>
标签中。
例如:
在python中定义一个过滤函数:
def convertLikes(count):
# do the convertion
return stars_number
在模板环境中注册:
app = Flask(__name__)
app.jinja_env.filters['convertLikes'] = convertLikes
在 jinja2 模板中使用它:
<td>{{ user.rate_appo.rate_punctuality.count | convertLikes }} </td>