我是python和flask的初学者。我有这个用python编写的简单app(容器填充),它接受一个数字作为输入(茶匙)并返回一个元组列表。
到目前为止,我已经能够使用flask正确格式化初始表单以便很好地显示'使用一些HTML和CSS。当一个数字输入并提交时,它只是显示一个元组列表。烧瓶代码如下所示:
from flask import Flask, request, render_template
from container_filler import ContainerFiller
app = Flask(__name__)
@app.route('/', methods=['GET'])
def form():
return render_template('index.html')
@app.route('/submit', methods=['POST'])
def submit():
return str(ContainerFiller().calculate(int(request.form['teaspoons'])))
我现在要做的是基于返回的str,我想更改背景颜色,也许添加图标。
例如,如果返回值为[('加仑',42)],我希望加仑用填充蓝色的整页表示。我一直在查看教程和其他人的代码,了解他们通常如何使用flask,我无法将其转换为我的代码。到目前为止,我尝试过这样的事情,但没有效果:
烧瓶代码:
@app.route('/submit', methods=['POST']
def submit():
a = str(ContainerFiller().calculate(int(request.form['teaspoons'])))
for c,d in a:
if c == 'gallon':
return render_template('some.html')
else:
return a
但这只是给了我一个内部服务器错误'所以它让我觉得这不是一种合法的方式。但我不知道该如何进行。
*编辑
Traceback (most recent call last):
return self.view_functions[rule.endpoint](**req.view_arg
File "/home/James/Documents/Container/service.py", line 17, in submit
for c, d in a:
ValueError: not enough values to unpack (expected 2, got 1)
答案 0 :(得分:0)
如果您的方法ContainerFiller().calculate
返回一个元组,则必须使用元组作为参数呈现模板。
@app.route('/submit', methods=['POST']
def submit():
a = str(ContainerFiller().calculate(int(request.form['teaspoons'])))
return render_template('some.html', value=a )
并使用jinja模板引擎中的值,并根据a的值更改样式!
所以基本上在你的some.html中,你应该有这个:
<div>
This is a text inside a div element.
We are still in the div element.
</div>
并根据c:
的值更改syle<style>
div {
{% for c, d in value %}
{% if c == 'gallon' %}
background-color: lightblue;
{% elif c == 'avalue' %}
background-color: red ;
{% else %}
background-color: green;
{% endif %}
{% endfor %}
}