我正在尝试使用 WTForms 颜色输入字段。
这就是我定义表单的方式:
from wtforms.widgets.html5 import ColorInput
class ColoursForm(Form):
background_color = ColorInput()
Run Code Online (Sandbox Code Playgroud)
这是视图:
@app.route("/colours/<token>/", methods=['GET', 'POST'])
def edit_colours(token):
form = ColoursForm(request.form)
if request.method == 'GET':
return render_template('colours_edit.html', form=form, token=token)
else: # Request = post
return redirect(url_for('view_scoreboard', token=token))
Run Code Online (Sandbox Code Playgroud)
在我的 Jinja2 模板 (colours_edit.html) 中,我这样做:
<p> {{ form.background_color }} Pick a color here </p>
Run Code Online (Sandbox Code Playgroud)
但是,它没有按预期渲染 HTML 颜色选择器,而是在渲染的 HTML 中看到了这一点:
<wtforms.widgets.html5.ColorInput 对象位于 0x10b836e90> 在此处选择颜色
为什么输入没有被渲染?
我创建了一个 HTML 表,其中列出了 SQLAlchemy 表中的许多行。该表是使用 jinja2 模板通过循环创建的:
{% for single_merchant in merchants %}
<tr>
<td>{{single_merchant.id}}</td>
<td><button type="button" class="btn btn-sm btn-outline-danger">Delete</button>
</tr>
Run Code Online (Sandbox Code Playgroud)
每行都有一个“删除”按钮。我正在尝试弄清楚如何分配删除按钮来删除该特定的 SQLalchemy 行。我尝试将按钮创建为名为的单独烧瓶形式delete_form,并添加一个id="{{single_merchant.id}}属性,button如下所示:
{% for single_merchant in merchants %}
<tr>
<td>{{single_merchant.id}}</td>
<form method="post">
{{ delete_form.hidden_tag() }}
<td>{{ delete_form.delete(id=single_merchant.id) }}</td>
</form>
</tr>
Run Code Online (Sandbox Code Playgroud)
然后在 app.py 中我创建了一个 if 语句:
if delete_form.validate_on_submit():
print(f"merchant to delete ID - {delete_form.delete.id}")
Run Code Online (Sandbox Code Playgroud)
我希望获得single_merchant.id输出并在 if 语句中使用它从我的 SQLAlchemy 表中删除特定商家,但相反,我得到了输出,merchant to delete ID - delete即使从 HTML 文件中该id属性的值为 1,因为 …
我已经阅读了我能找到的每个教程和一些文档,但找不到我的问题.我以"公司"为例,尽可能简化了这一点.当我加载我的/ company/edit/2 url时,表单不会填充该值.
@app.route('/company/edit/<id>')
def company_edit(id):
company = {'id': 2, 'company_name': 'SomeCo'} #dummy object
form = CompanyForm(obj=company)
#form = CompanyForm(None, company) #tried this too, based on API
return render_template('company_form.html', form = form)
Run Code Online (Sandbox Code Playgroud)
class CompanyForm(Form):
company_name = TextField('company_name', validators = [Required()])
Run Code Online (Sandbox Code Playgroud)
<!-- extend base layout -->
{% extends "base.html" %}
{% block content %}
<form action="" method="post" name="login">
{{form.hidden_tag()}}
<p>
Company Name:<br>
{{form.company_name(size=80)}}<br>
</p>
<p><input type="submit" value="Sign In"></p>
</form>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
我的理解是这应该工作 - 路由/公司/编辑/ x将调用company_edit(x),它声明虚拟公司对象(稍后从数据库中提取),实例化表单,传递公司对象,然后渲染传递表单的模板.表单模板应该能够匹配公司对象中的字段名称,表单对象中的相应输入名称,并使用值"SomeCo"填充文本字段.我错过了一些明显的东西吗
谢谢!
我之前使用过烧瓶,并且我已经进行了工作表单验证,但由于某种原因,它不能用于我的新应用程序.这是表单的基本代码.
from flask.ext.wtf import Form, TextField, TextAreaField, SubmitField, validators,ValidationError
class subReddit(Form):
subreddit = TextField('subreddit', [validators.Required('enter valid subreddit')])
next = SubmitField('next')
change = SubmitField('change')
user = TextField('user', [validators.Required('enter valid user')])
fetch = SubmitField('fetch comments')
Run Code Online (Sandbox Code Playgroud)
我有subreddit作为验证字段,所以如果它是空的,我希望它抛出错误并重新加载页面.
HTML:
<form class='sub' action="{{ url_for('sr') }}" method='post'>
{{ form.hidden_tag() }}
<p>
if you want to enter more than one subreddit, use the + symbol, like this:
funny+pics+cringepics
<p>
<br/>
{% for error in form.subreddit.errors %}
<p>{{error}}</p>
{% endfor %}
{{form.subreddit.label}}
{{form.subreddit}}
{{form.change}}
</form>
Run Code Online (Sandbox Code Playgroud)
我的routes.py中也有CSRF_ENABLED = True.我错过了什么?当我将subredditfield留空并单击更改时,它只是重新加载页面,没有错误.这是一个问题,因为该字段中的任何内容都将记录在我的数据库中,并且它不能为空. …
所以基本上我有render_template基于if语句的多个返回,并且它们返回我的jinja2模板响应的不同变量.我相信我可以将这些路径分解为自己的功能(同样我可以将我的模板分解为多个模板(例如edit.html模板而不是{% if editform %}我模板中的模板)),但我喜欢这样的想法任何给定页面的单一视图功能和模板.
在我花更多时间创建其余视图函数之前,我想确保我正在做的事情不会在以后咬我.
代码如下,谢谢!
@app.route('/admin/users/', defaults={'id': None}, methods = ['GET'])
@app.route('/admin/users/<id>', methods = ['GET'])
@app.route('/admin/users/edit/<id>', methods = ['GET', 'POST'])
@login_required
def users(id):
if not current_user.role == ROLE_ADMIN:
flash('You do not have access to view this page.')
return redirect(url_for('index'))
if id:
user = User.query.filter_by(id = id).first()
if 'edit' in request.path:
editform = UserForm()
if editform.validate_on_submit():
user.username = editform.username.data
user.email = editform.email.data
user.role = editform.role.data
db.session.add(user)
db.session.commit()
return redirect('/admin/users/' + str(user.id))
editform.username.data = user.username
editform.email.data = …Run Code Online (Sandbox Code Playgroud) 我创建了以下表单:
class ContentForm(Form):
content = StringField(u'write here' , validators=[Required()])
submit = SubmitField(u'Let them know' )
Run Code Online (Sandbox Code Playgroud)
当我提交时,事情似乎有效.但是,当我之后刷新页面时,表单会再次提交.我该如何解决?
基于本教程,我正在尝试创建一个表单来进行一些测量.似乎显示数据的部分正在工作,但是当使用model_form命令生成输入表单时,它会突然出现以下错误:
在转换'description'中输入文件"/myproject/lib/python3.4/site-packages/flask_mongoengine/wtf/orm.py",第49行:field.help_text或'',
AttributeError:'ObjectIdField'对象没有属性'help_text'
错误发生在我的代码的这一行:
form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))
Run Code Online (Sandbox Code Playgroud)
这是我的view.py代码:
from flask import Blueprint, request, redirect, render_template, url_for
from flask.views import MethodView
from flask.ext.mongoengine.wtf import model_form
from pyReefLog.models import Measurement
measurements = Blueprint('measurements', __name__, template_folder='templates')
class List(MethodView):
cls = Measurement
def get(self):
measurements = self.cls.objects.all()
return render_template('measurements/list.html', measurements=measurements)
class Detail(MethodView):
def get_context(self, creator=None):
form_cls = model_form(Measurement, exclude=('id', 'created_at', 'comments'))
if creator:
measurement = Measurement.objects.get_or_404(creator=creator)
if request.method == 'POST':
form = form_cls(request.form, inital=measurement._data)
else:
form = …Run Code Online (Sandbox Code Playgroud) 我无法找出导致此错误的原因
TypeError: __init__() takes at most 2 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
这是指向
@user_blueprint.route('/login', methods=['GET', 'POST'])
def login():
if g.user.is_authenticated:
flash("You are already Logged in", 'warning')
return redirect(url_for('members'))
error = ""
form = LoginForm()
if request.method == 'POST':
if form.validate_on_submit():
user = User.query.filter_by(username=form.username.data).first()
if user is not None and bcrypt.check_password_hash(user.password, form.password.data):
login_user(user, remember=form.remember.data)
flash('You are sucessfuly Logged in', 'success')
return redirect(url_for('members'))
else:
error = "You have entered an incorrect username and password"
return render_template("front/login.html", forms=form, error=error)
Run Code Online (Sandbox Code Playgroud)
该LoginForm如下所示:
class LoginForm(Form):
username …Run Code Online (Sandbox Code Playgroud) 我有以下代码,我正在提交表格.当我点击提交按钮时,我的表单验证打印出来False.我已经检查并确保我包含了不同帖子中的所有内容,但我无法让它验证.有什么我做错了吗?
@app.route('/index.html', methods=['GET', 'POST'])
def index():
user = {'nickname': 'Rafa'}
form = FilterForm()
print("about to validate", file=sys.stderr)
if form.validate_on_submit():
print("validated", file=sys.stderr)
filters_array = form.filter.split(',')
streaming(filters_array)
response = {"response", "yes"}
redirect("/authenticate")
return render_template('index.html',
title="Home",
user=user,
form=form)
class FilterForm(Form):
filter = StringField('filter', validators=[DataRequired()])
Run Code Online (Sandbox Code Playgroud)
这是我的Jinja文件
{% block content %}
<h1> I have successfully navigated to the title pagee </h1>
<h1> Hello, {{user.nickname}}!</h1>
<h1> Get Tweets </h1>
<p> Please enter a comma delimited list of filters</p>
<form action="" method="post" name="login">
{{form.filter(size=80)}}
<input …Run Code Online (Sandbox Code Playgroud) 我有一个现有的Flask应用程序,我正在尝试添加Flask-Blogging扩展.尝试ImportError: cannot import name FlaskForm时添加扩展名会引发.flask_bloggingfrom flask_wtf import FlaskForm
Traceback (most recent call last):
File "run.py", line 11, in <module>
blog_engine = BloggingEngine(app, sql_storage)
File "/usr/local/lib/python2.7/dist-packages/flask_blogging/engine.py", line 66, in __init__
self.init_app(app, storage)
File "/usr/local/lib/python2.7/dist-packages/flask_blogging/engine.py", line 96, in init_app
from .views import create_blueprint
File "/usr/local/lib/python2.7/dist-packages/flask_blogging/views.py", line 11, in <module>
from flask_blogging.forms import BlogEditor
File "/usr/local/lib/python2.7/dist-packages/flask_blogging/forms.py", line 1, in <module>
from flask_wtf import FlaskForm
ImportError: cannot import name FlaskForm
Run Code Online (Sandbox Code Playgroud)
我正在使用Flask 0.11.1和Flask-WTF 0.12.