html - Flask WTForms 验证器消息更改布局
问题描述
我在 Flask 中使用 WTForms 并在提交时验证表单输入。我面临的问题发生在使用 wtforms validators
。特别是,验证错误消息正在改变我的 HTML 页面的布局。代码如下,还包括更改的屏幕截图。
表格.py
from flask_wtf import FlaskForm
from wtforms import FieldList, FormField, HiddenField, validators
from wtforms.fields import StringField
class SingleGuessForm(FlaskForm):
# load list of accepted vocab
class Meta:
csrf = False
with open('accepted_words.txt') as f:
l = f.readlines()
l = [s.rstrip() for s in l]
guess = StringField(validators=[validators.Required(message='Guess is required'), validators.AnyOf(l, message='Guess is not in vocabulary.')])
class SentenceForm(FlaskForm):
# Disable CSRF for this class.
class Meta:
csrf = False
guess_form = FieldList(FormField(SingleGuessForm), min_entries=5, max_entries=5)
id = HiddenField()
page.html(相关部分)
<form action="" method="POST" id="overall_guess_form">
<table class="table">
<tr>
<td>
<div class="audio_elements">
<audio controls class="sentence_audio"
id="{{ form.id.data }}">
<source src="{{ form.path.data }}"
type="audio/wav">
</audio>
<span class="iconify check_mark"
data-icon="emojione:check-mark-button"
style="visibility: hidden;"
data-inline="false"></span>
</div>
</td>
<td style="width: 100%">
<form class="guess_fields">
{% for single_word_guess in form.guess_form %}
{{ single_word_guess.form.guess(class_='guess_box') }}
{{ single_word_guess.form.hidden_tag() }}
{{ single_word_guess.form.crsf_token }}
{# print errors if someone made one. Let's see if this works #}
{% for field, errors in single_word_guess.form.errors.items() %}
<small class="form-text text-muted ">
{{ ', '.join(errors) }}
</small>
{% endfor %}
{% endfor %}
</form>
</td>
</tr>
</table>
{{ form.hidden_tag() }}
{{ form.crsf_token }}
<div class="input submit" style="text-align: center">
<input id="submit-button" class="btn btn-primary" type="submit"
name="submitButton"
value="Continue"/>
</div>
</form>
样式.css
.guess_fields {
display: inline;
margin: auto;
}
.guess_box {
margin-top: 2%;
width: 18%;
}
这是我在提交之前呈现的 HTML 的样子 - 输入文本字段很好地彼此相邻,因为它们应该:
但提交后,布局变为:
我尝试使错误消息更短(只是“测试”),因为我怀疑下面的文本太长,但这并没有什么不同。如何在此处将输入字段保持在行中,并在其相应的 TextField 下方显示潜在的错误消息?
解决方案
在提交表单之前和之后,您是否查看过浏览器中的源代码?我怀疑这个问题是由<small class="form-text text-muted ">
提交后出现的图例()引起的,当报告错误时。
我猜您正在使用 Bootstrap,所以我建议您查看表单布局帮助,将您的表单重组为内联表单。可用的 Bootstrap 类应该足够了。
推荐阅读
- c++ - qt 自定义类中没有名为“setText”的成员错误
- amazon-web-services - 有没有办法隔离一个状态(或某些状态),以便其余的不会在 AWS Step Function 中执行(调试)?
- python - 无法打开使用 python 和 Django 创建的 zip 文件
- selenium-webdriver - “.//*”和“//*”XPath 的区别?
- excel - 比较两个单元格字符串以打印出好坏
- swift - 添加新项目时 SwiftUI 列表未更新
- typescript - 联合类型允许对所用类型的属性进行错误分配
- c# - Kofax Total Agility:以编程方式将文档作业移动到特定流程步骤
- c# - 通过 web.config ASP.NET MVC 删除查询字符串
- node.js - 为什么 Nodemailer 不能安全地连接到我在共享主机上运行的服务器