在WTForm使用Jinja2的引发错误

问题描述 投票:1回答:4

我试图提高在Jinja2的错误,在WTForm,如果输入的网址不验证错误应该提高,但是当我提出invalide网址,我得到一个弹出说:“请输入网址”。

我如何通过默认弹出,并添加自定义错误消息?

这里是主要潘岳:

from datetime import datetime
from flask import Flask, render_template, url_for, request, redirect,flash
from logging import DEBUG
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField
from flask.ext.wtf.html5 import URLField
from wtforms.validators import DataRequired , url


app = Flask(__name__)
app.logger.setLevel(DEBUG)
app.config['SECRET_KEY']='{@\x8d\x90\xbf\x89n\x06%`I\xfa(d\xc2\x0e\xfa\xb7>\x81?\x86\x7f\x1e'


@app.route('/')
@app.route('/index')

def index():
    return render_template('base.html')

@app.route('/add', methods=['GET','POST'])
def add():
    return render_template('add.html')


# HERE IS THE LOGIN FORM
class Login(FlaskForm):
    username = StringField('username')
    password = PasswordField('password')
    url = URLField('url', validators=[DataRequired(),url()])

@app.route('/form', methods=['GET','POST'])
def form():
    form = Login()
    if form.validate_on_submit():
        url = form.url.data
        return redirect(url_for('index'))
    return render_template('form.html',form = form )


if __name__ =='__main__':
    app.run(debug=True)

这里是模板:

  <!DOCTYPE html>
<html>
<head>
    <title>form</title>
</head>
<body>
 <h1>Hello !</h1>
 <form method="POST" action="{{url_for('form')}}">
 {{ form.hidden_tag() }}
 {{ form.csrf_token }}
 {{ form.username.label }}
 {{ form.username }}
 {{ form.password.label }}
 {{ form.password }}
 {{ form.url.label }}
 {{ form.url }}
  {% if form.url.errors %} <p> {{error}}</p> {% endif %}
 <button type="submit">Submit</button>
 </form>
</body>
</html>
python html flask jinja2 wtforms
4个回答
1
投票

因为你使用的数据类型URLField,这呈现为HTML5“URL”表单字段类型。

enter image description here

您的浏览器认识到这一点,并对提交的数据它自己的验证:

enter image description here

有没有办法让你重写这一点 - 它的内置浏览器。

如果您需要显示自定义错误消息,您可能能够使用TextField代替,并提供自己的URL验证逻辑。


0
投票

在你的表单定义添加您自己的消息,而不是默认的消息。

url = URLField('url', validators=[DataRequired(),url(message="Please enter a valid url (e.g.-http://example.com/)")]) 

0
投票

作为mentiones之前马特希利,它是验证URLField浏览器。所以,如果你想有一个自定义错误消息使用StringFieldTextField是过时的)。如果需要,可以使用自定义消息如下所示message='text to display'。例:

class XYZForm(FlaskForm):
    url = StringField('url', validators=[DataRequired(),url(message='Please enter valid URL')])
    description = StringField('description')

当然,*。html的应该包括代码输出错误页面:

                <ul>
                    {% for error in form.url.errors %}
                        <li>{{ error }}</li>
                    {% endfor %}
                </ul>

-2
投票

这似乎是novalidate attribute适用于你的情况。

© www.soinside.com 2019 - 2024. All rights reserved.