Python 只能将字符串值粘贴到Flask WTF表单字段
我试图让一个视图函数将十进制值(最终来自数据库)粘贴到WTF表单字段中。除非我将字段更改为字符串字段,否则该值不会显示。我是否需要额外的东西将数值粘贴到十进制字段中 我创建了一个小的,希望可以复制的例子来测试这个功能。它有一个字段,在加载页面时,该字段应在字段中粘贴一个值 最初我尝试使用十进制字段,并尝试粘贴一个随机数,但当呈现页面时,该数字不会显示。当字段更改为IntegerField或FloatField时,也会发生同样的情况 将表单字段更改为字符串字段时,值将在页面呈现时显示-但是这不是理想的解决方案,因为值将是字符串 routes.pyPython 只能将字符串值粘贴到Flask WTF表单字段,python,flask,flask-wtforms,Python,Flask,Flask Wtforms,我试图让一个视图函数将十进制值(最终来自数据库)粘贴到WTF表单字段中。除非我将字段更改为字符串字段,否则该值不会显示。我是否需要额外的东西将数值粘贴到十进制字段中 我创建了一个小的,希望可以复制的例子来测试这个功能。它有一个字段,在加载页面时,该字段应在字段中粘贴一个值 最初我尝试使用十进制字段,并尝试粘贴一个随机数,但当呈现页面时,该数字不会显示。当字段更改为IntegerField或FloatField时,也会发生同样的情况 将表单字段更改为字符串字段时,值将在页面呈现时显示-但是这不是理
from flask import render_template, flash
from app import app
from app.forms import TestForm
@app.route('/',methods=['GET','POST'])
@app.route('/index/',methods=['GET','POST'])
def index():
# define form
test_form = TestForm()
test_form.testfield.data = 10
return render_template('sandbox_home.html',
test_form = test_form
)
from flask_wtf import FlaskForm
from wtforms import StringField,DecimalField
class TestForm(FlaskForm):
testfield=StringField()
forms.py
from flask import render_template, flash
from app import app
from app.forms import TestForm
@app.route('/',methods=['GET','POST'])
@app.route('/index/',methods=['GET','POST'])
def index():
# define form
test_form = TestForm()
test_form.testfield.data = 10
return render_template('sandbox_home.html',
test_form = test_form
)
from flask_wtf import FlaskForm
from wtforms import StringField,DecimalField
class TestForm(FlaskForm):
testfield=StringField()
sandbox\u home.html
我安全的地方
我的存在是为了将值粘贴到表单字段
{{test_form.hidden_tag()}}
{{test_form.testfield()}}
如果输入类型正确,则无论字段类型如何,我都希望显示该值。我猜这是一个数据类型问题,但我不确定问题在哪里。这里有一个最简单的示例,可以说明这一点:
从烧瓶导入烧瓶,呈现\u模板\u字符串
来自flask_wtf进口FlaskForm
从wtforms导入StringField、IntegerField、DecimalField
app=烧瓶(名称)
app.secret_key=“;lskjflksdjflsdkjfsd;lghdi9uawhj”
类别测试表格(烧瓶表格):
test_str=StringField()
test_int=IntegerField()
test_dec=DecimalField()
模板=“”“
我安全的地方
我的存在是为了将值粘贴到表单字段
{{test_form.hidden_tag()}}
{{test_form.test_str()}}
{{test_form.test_int()}}
{{test_form.test_dec()}
"""
如果名称=“\uuuuu main\uuuuuuuu”:
#模拟处理请求
使用app.test\u request\u context():
test_form=TestForm()
测试形式测试结构数据=10
test\u form.test\u int.data=10
测试形式测试12月数据=10
#渲染模板并保存到文件,以便在浏览器中打开
以open(“test.html”、“w”)作为f:
f、 写入(呈现模板字符串(模板,测试形式=测试形式))
它将呈现的模板保存到名为test.html
的文件中,该文件如下所示:
我安全的地方
我的存在是为了将值粘贴到表单字段
以下是浏览器中的屏幕截图:
从呈现的模板中可以看到,WTForms不区分浏览器中不同类型的字段(即,它们都是
type=“text”
)。如果您能让我知道如何修改此脚本以重现您的错误,我很乐意再次查看。我刚刚测试过,它工作得非常完美。您能告诉我您使用的是哪个版本的FLASK
和FLASK\wtf
?您是否考虑了CamelCase
IntegerField
而不是IntegerField
?@Tobin我使用的是Flask 1.1.1
和Flask_wtf 0.14.2
,看起来它们是最新的版本。我刚刚用IntegerField
再次尝试,并再次检查了CamelCase
,结果相同(字段中没有填充任何内容)。感谢您的详细回复。我修改了代码,一次添加了所有三种类型(十进制、字符串和整数)。重新启动本地服务器后,它工作了!我不确定错误在哪里(可能会重新启动服务器,尽管我以前多次这样做),但我会尝试进一步深入研究。您是否一直在调试模式下运行本地服务器,以便自动重新加载代码更改?也许你对不一致行为的看法是因为这种情况没有发生?