我想在标签文本之前(或之后)添加“*”,以防需要提交。
我现在可以通过在我的模板中使用它来做到这一点:
{% for field in form %}
<label for="{{ field.name }}">
{{ '*' if field.flags.required }}{{ field.label.text }} :
</label>
{{ field }}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
有没有比这更好的方法,至少有一种方法可以避免手动添加标签元素?
class Example_Form(Form):
field_1 = TextAreaField()
field_2 = TextAreaField()
def __init__(self, type, **kwargs):
super(Example_Form, self).__init__(**kwargs)
if type == 'type_1':
self.field_3 = TextAreaField()
Run Code Online (Sandbox Code Playgroud)
In some scenarios I need to dynamically add fields into the form. The field_3 added to example form turns out to be a UnboundField. I tried to bind field_3 to form in __init__ function, but it won't work.
field_3 = TextAreaField()
field_3.bind(self, 'field_3')
Run Code Online (Sandbox Code Playgroud)
How to bind field_3 to example form?
我是 Flask 和 WTF 的新手,在设置登录页面时遇到困难。我在 StackOverflow 上发现了一些导致类似错误的问题,但这些问题是由于表单未传递到模板而导致的,我相信我已经这样做了。
这是输入.py:
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
from flask import render_template, request, redirect, url_for, send_file
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField
from wtforms.validators import InputRequired, Email, Length
from models import *
app = Flask(__name__)
app.config['SECRET_KEY'] = 'thisisasecret'
Bootstrap(app)
app.config.from_pyfile('config.py')
db = SQLAlchemy(app)
class LoginForm(FlaskForm):
username = StringField('username', validators=[InputRequired(), Length(min=4, max=15)])
password = PasswordField('password', validators=[InputRequired(), Length(min=8, max=80)])
remember = BooleanField('remember me')
@app.route('/')
def index(): …Run Code Online (Sandbox Code Playgroud) 我开始将 Babel 与 WTForms 和 Flask 一起使用。下面我尝试 gettext 我的用户名和密码的占位符关键字字段的占位符关键字:
\n\n#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\nfrom flask_babel import gettext\nfrom flask_wtf import FlaskForm\nfrom wtforms import PasswordField, StringField\nfrom wtforms.validators import DataRequired\n\n\nclass LoginForm(FlaskForm):\n username = StringField(label=\'username\',\n validators=[DataRequired()],\n render_kw={"placeholder": gettext(\'Username\')})\n password = PasswordField(label=\'password\',\n validators=[DataRequired()],\n render_kw={"placeholder": gettext(\'Password\')})\nRun Code Online (Sandbox Code Playgroud)\n\n这是我的法语 .po 文件(当然已经编译过):
\n\n# French (France) translations for PROJECT.\n# Copyright (C) 2017 ORGANIZATION\n# This file is distributed under the same license as the PROJECT project.\n# FIRST AUTHOR <EMAIL@ADDRESS>, 2017.\n#\nmsgid ""\nmsgstr ""\n"Project-Id-Version: PROJECT …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
class ReconForm(Form):
compressedFilePath = StringField('Compressed File Path', [validators.Required()] )
Run Code Online (Sandbox Code Playgroud)
我像这样实例化它:
form = ReconForm()
form.compressedFilePath.default = 'hey'
Run Code Online (Sandbox Code Playgroud)
它什么都不做。它曾经将默认值设置为 hey 但后来它停止了,我不知道为什么。
如果我打印 form.compressedFilePath.default 然后它打印正确的值。如果我在字段构造函数中设置默认值,模板会呈现正确的值。否则它什么都不做,它让我发疯。
我究竟做错了什么?
我正在关注http://code.tutsplus.com/tutorials/intro-to-flask-signing-in-and-out--net-29982教程来开发我自己的应用程序.
我试图创建一个注册表但遇到此错误:
TypeError: 'Required' object is not iterable
Run Code Online (Sandbox Code Playgroud)
我的路线页是
from cafe_klatch import app
from flask import render_template,request,flash
from forms import ContactForm, SignupForm
from models import db
@app.route('/')
@app.route('/index')
def index():
return render_template('index.html')
@app.route('/contact', methods = ['GET','POST'])
def contact():
form1 = ContactForm()
if request.method == 'POST':
if form.validate() == False:
flash('All fields are required.')
return render_template('contact.html',form = form)
else:
return 'Form posted.'
elif request.method == 'GET':
return render_template('contact.html',form = form)
@app.route('/signup', methods =['GET','POST'])
def signup():
form = SignupForm()
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Flask的html 5小部件来构建RangeInput(搜索"范围"以找到它).我想我在HTML模板中遗漏了一些东西,因为它呈现的方式如下:

正如你所看到的,这不是我想要的:我期待的是这样的:

所以我认为错误不是那么棘手,但我找不到它.这是我的不同文件:
__author__ = 'laurentmeyer'
# That's my main class, don't be afraid, all is local, you cannot hack anything
from MySQL import MySQL
from flask import Flask, render_template
from Form import Form;
mysql = MySQL();
app = Flask(__name__)
app.config['MYSQL_DATABASE_USER'] = 'Laurent'
app.config['MYSQL_DATABASE_PASSWORD'] = 'laurent'
app.config['MYSQL_DATABASE_DB'] = 'Houses'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
@app.route("/")
def home():
cursor = mysql.connect().cursor()
cursor.execute("SELECT * from Offers;")
data = cursor.fetchall()
form = Form(csrf_enabled=False);
if data is None:
return "No data"
else: …Run Code Online (Sandbox Code Playgroud) from flask.ext.wtf import Form
from flask import send_from_directory
from wtforms import StringField, BooleanField
from wtforms import SelectField
import os
from os import listdir
from os.path import isfile, join
crewPath = ("/myproject/app/static/Crews")
filenamesCrew = [f for f in listdir(crewPath) if isfile(join(crewPath,f)) ]
class userInput(Form):
json_fileCrew = SelectField(u"json_fileCrew", choices=[(f, f) for f in filenamesCrew])
def get_data(self):
json = send_from_directory (crewPath, self.json_fileCrew.data)
return json
@app.route('/CastCrew', methods=['GET', 'POST'])
def castCrew():
form = userInput(request.form["crewYear"])
return render_template('CastCrew.html', title = 'Cast Crew View', form = form)
@app.route("/data", …Run Code Online (Sandbox Code Playgroud) 我有一个EmployeeForm领域包括PhotoForm如下所示:
class EmployeeForm(Form):
name = StringField('Full Name', validators=[DataRequired()])
title = StringField('Job Title', validators=[DataRequired()])
email = StringField('Company Email', validators=[DataRequired()])
department = StringField('Department', validators=[DataRequired()])
photo = FormField(PhotoForm)
Run Code Online (Sandbox Code Playgroud)
取决于USE_S3配置变量是否设置为True或False我希望我的照片对象上的两个字段自动设置为默认值,如下所示:
class PhotoForm(Form):
image = S3ImageUploadField(base_path=app.config['UPLOAD_FOLDER'],namegen=photo_name_generator)
if app.config['USE_S3']:
image_storage_type = HiddenField('s3')
image_storage_bucket_name = HiddenField(app.config['S3_BUCKET_NAME'])
else:
image_storage_type = HiddenField('empty string')
image_storage_bucket_name = HiddenField('empty string')
Run Code Online (Sandbox Code Playgroud)
但是,当我检查表单的html时,没有隐藏的字段,也没有当我在提交时检查数据库是否有任何设置值image_storage_type,image_bucket_name并且我无法弄清楚为什么会这样.我已经检查了一些stackoverflow问题,但它们并不完全符合我的问题,因为我正在使用Flask-Admin和WTForm在一起,在我看来,它使它更棘手.
此外,我admin.py的表单呈现文件如下所示:
class EmployeeView(ModelView):
form = EmployeeForm
Run Code Online (Sandbox Code Playgroud)
我不确定这是WTForm方面或Flask-Admin方面的问题,但我已经尝试了很长时间才能完成这项工作.有没有人有任何想法?非常感谢帮助.
例外是AttributeError: 'StringField' object has no attribute 'wrap_formdata',它似乎只发生在我从 Flask-Admin 仪表板创建或编辑以下两个模型中的任何一个时:
class Experiment(db.Model):
id = db.Column(db.Integer, primary_key=True)
property_id = db.Column(db.Integer,
db.ForeignKey('property.id'),
index=True,
nullable=False)
name = db.Column(db.String, nullable=False)
start_date = db.Column(db.DateTime, nullable=True)
end_date = db.Column(db.DateTime, nullable=True)
status = db.Column(db.String, nullable=False, default='Draft')
title = db.Column(db.String)
meta = db.Column(db.String)
seed_uri = db.Column(db.String)
targets = db.Column(postgresql.JSON)
variations_json = db.Column(postgresql.JSON)
variations = db.relationship('ExperimentVariation',
backref='experiment',
cascade='save-update, merge, delete')
def __repr__(self):
repr_fmt = '<Experiment {id}, {property_id} {name}>'
return repr_fmt.format(id=self.id,
property_id=self.property_id,
name=self.name)
class ExperimentVariation(db.Model):
id = db.Column(db.Integer, primary_key=True) …Run Code Online (Sandbox Code Playgroud) sqlalchemy wtforms flask-sqlalchemy flask-wtforms flask-admin
我正在flask中创建一个联系表单,我想在jinja2中使用html占位符,如何在jinja 2中使用html占位符?
<form action="{{ url_for('contact_page') }}" class="col-md-6 mx-auto my-auto mt-3" method="POST">
{{ form.hidden_tag() }}
<p class="text-left">{{ form.name.label() }}</p>
{{ form.name(class="form-control mb-2") }}
<p class="text-left">{{ form.email.label() }}</p>
{{ form.email(class="form-control mb-2") }}
<p class="text-left">{{ form.subject.label() }}</p>
{{ form.subject(class="form-control mb-2") }}
<p class="text-left">{{ form.message.label() }}</p>
{{ form.message(class="form-control mb-3") }}
<div class="form-group">
{{ form.submit(class="btn btn-primary btn-round mt-4 ") }}
</div>
</form>
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Flask 中的 WTForms 使用“MultiFileField”上传多个图像,但是,它返回一个字符串而不是文件对象。所以我尝试使用以下内容:
request.files.getlist(form.upload_field.data)
Run Code Online (Sandbox Code Playgroud)
但它返回一个空列表,所以无论如何我可以处理这个将照片保存到目录中
在我的烧瓶应用程序中为以下代码抛出错误。
@@app.route('/')
.....
return redirect(url_for('nextPage'),id=DBTable.id)
@app.route('/<path:id>')
@login_required
def nextPage(id):
return render_template('page2.html')
Error -
---------------------------------------------------------------------------
File "C:\Python27\lib\site-packages\werkzeug\routing.py", line 1607, in build
raise BuildError(endpoint, values, method)
BuildError: ('nextPage', {}, None)
<SocketIOServer fileno=116 address=0.0.0.0:5000>: Failed to handle request:
request = POST /landingPage HTTP/1.1 from ('127.0.0.1', 50287)
application = <flask.app.Flask object at 0x0000000002643B70>
Run Code Online (Sandbox Code Playgroud)
请帮助我解决上述问题
flask-wtforms ×13
flask ×11
python ×10
wtforms ×5
flask-admin ×2
flask-login ×2
file-upload ×1
flask-babel ×1
html ×1
python-babel ×1
sqlalchemy ×1