如何覆盖预测试瓶上的表单

2024-06-28 15:58:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图提出一个错误,当一个用户提交没有选择一个无线电选项,它没有工作。当我呈现如下字段时:{{ render_field(form.example) }}它将打印(self.gettext('PICK SOMETHING'),但是当我使用下面的格式时,什么都不会发生:

    {% for subfield in form.religion %}
        {{ render_field(subfield, class_="foo") }}
        {{ render_field(subfield.label) }}
    {% endfor %}

在收音机.py在

^{pr2}$

如果我没有选择任何选项就提交,如何重写pre_validate以引发错误?在


Tags: 用户inselfformfieldforexample格式
1条回答
网友
1楼 · 发布于 2024-06-28 15:58:18

试试这个脚本:

from flask import Flask
from flask import render_template
from flask import request
from flask import flash
from flask import redirect
from flask_wtf import FlaskForm
from wtforms import SelectField
from wtforms.widgets import ListWidget, RadioInput
from wtforms.validators import DataRequired


app = Flask(__name__)

class ReligionField(SelectField):
    widget = ListWidget(prefix_label=False)
    option_widget = RadioInput()

    def pre_validate(self, form):
        for v, _ in self.choices:
            if self.data == v:
                break
        else:
            raise ValueError(self.gettext('PICK SOMETHING'))

class ReligionForm(FlaskForm):
    religions = ['Christian', 'Muslim', 'Hindu', 'Buddhist']
    choices = [(x.lower(), x.title()) for x in sorted(religions)]
    religion = ReligionField('Religion', validators=[DataRequired()], choices=choices, render_kw={"class":"post", "type":"radio"})


@app.route('/',methods=['GET','POST'])
def hello_world():
    form = ReligionForm(request.form)

    if request.method == 'POST':
        if form.validate_on_submit():
        print form.religion.data
        else:
        print form.religion.errors[0]
        flash(form.religion.errors[0])
        return redirect('/')
    return render_template('radio.html', form=form)


if __name__ == "__main__":
    app.run()

在收音机.html在

^{pr2}$

相关问题 更多 >