我已经检查并发现 Flask-Bootstrap 在默认情况下安装时本机使用 Bootstrap 3.3.7。但实际上我想通过使用 Flask-Bootstrap 包为我的项目使用 Bootstrap 4+,任何关于如何更新它或类似的帮助将不胜感激。谢谢
新手,尝试按照着名的Flask教程构建应用程序,使用Flask-bootstrap,Flask-wtforms,Jinja等
我有一个包含2个选择字段和一个按钮的表单.
class Form(FlaskForm):
school_year = SelectField('School year', choices=some_tuples_list)
category = SelectField('Category', choices=[])
submit = SubmitField('submit')
Run Code Online (Sandbox Code Playgroud)
我希望只预先填充第一个字段,并根据前一个字段的选定值填充另一个字段(在客户端?).
在模板中,我尝试了类似的东西
{{ form.school_year(**{"onchange":"getCategories()"}) }}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常(假设我返回元组列表以填充下一个字段,使用正确的javascript和路由)但我想要类似下面的内容
{{ wtf.form_field(form.school_year(**{"onchange":"getCategories()"})) }}
Run Code Online (Sandbox Code Playgroud)
哪个不起作用(错误:wtforms.widgets.core.HTMLString对象'没有属性'标志')
所以,我想我的问题是:如何在这个wtf表单字段上实现onChange事件?(这是我必须做的,还是从视图功能有一种方法?)
提前致谢.
我可以使用WTForms和Flask向我的数据库添加一个新条目,我也可以编辑,问题是我需要以编辑形式显示数据库中已有的信息.
我有以下代码:
class editPostForm(Form):
postTitle = TextField('postTitle', validators.Required()])
postSubtitle = TextField('postSubtitle', validators.Required()])
Run Code Online (Sandbox Code Playgroud)
@app.route('/editpost/<postId>', methods = ['GET','POST'])
def editpost_page(postId):
try:
form = editPostForm(form)
if request.method == "POST" and form.validate():
postTitle = form.postTitle.data
postSubtitle = form.postSubtitle.data
c, conn = connection()
query = c.execute("SELECT * FROM posts WHERE post_id = (%s)",
[noinjection(postId)])
c.execute("UPDATE posts SET post_title=%s, post_subtitle=%s WHERE post_id = %s",
[
noinjection(postTitle),
noinjection(postSubtitle),
noinjection(postId)
])
conn.commit()
flash("Post Edited", 'success')
c.close()
conn.close()
gc.collect()
return redirect(url_for('posts'))
return render_template("editpost.html", form = form, POST_ID …Run Code Online (Sandbox Code Playgroud) 我正在学习 Flask Web 开发,我正在学习的教程介绍了一个名为Flask-Bootstrap的扩展。要使用这个扩展,你必须先初始化它,像这样:
from flask_bootstrap import Bootstrap
# ...
bootstrap = Bootstrap(app)
Run Code Online (Sandbox Code Playgroud)
对我来说很奇怪bootstrap,我的模块的其余部分没有使用该变量。但是,如果我注释掉这一行,jinja2.exceptions.TemplateNotFound则会引发异常。此外,使用的模板以这一行开头:
{% extends "bootstrap/base.html" %}
Run Code Online (Sandbox Code Playgroud)
但我没有指定目录/bootstrap下/templates!
我想知道发生了什么:
bootstrap = Bootstrap(app)行吗?bootstrap/base.html?使用quick_form Flask-Bootstrap生成的形式对我来说是非常方便的,但是,我不能在他们找到的文档的方式,我可以额外类添加到label所要求的我的模板主题。
我的 forms.py 类如下所示:
from flask_wtf import Form
from wtforms import StringField,PasswordField,TextField,SubmitField
from wtforms.validators import InputRequired,EqualTo,Email,ValidationError
class Building_Form(Form):
BuildingName = TextField('Building Name')
BuildingType = TextField('Building Type')
FloorNums = TextField('Numers of Floor')
BuildUnits = TextField('Units in Building')
BuildSize = TextField('Building Size')
BuiltYear = TextField('Built in (year)')
BuildOpeningTime = TextField('Open Time')
BuildClosingTime = TextField('Close Time')
Run Code Online (Sandbox Code Playgroud)
我的routes.py如下所示:
from app.import_core import *
from flask_wtf import FlaskForm
from wtforms import Form, BooleanField, StringField, PasswordField, validators
from …Run Code Online (Sandbox Code Playgroud) 我希望我的网站始终重定向到该网站的安全 https 版本,我正在flask-talisman这样做。然而,出于某种原因,添加这行看似无关的代码会破坏flask-bootstrap我网站上的格式。
这是__init__.py添加之前原始文件和网站的样子flask-talisman:
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_bootstrap import Bootstrap
from flask_heroku import Heroku
app = Flask(__name__)
app.config.from_object(Config)
Bootstrap(app)
heroku = Heroku(app)
db = SQLAlchemy(app)
migrate = Migrate(app, db)
from app import routes, models
Run Code Online (Sandbox Code Playgroud)
这是__init__.py添加后文件和网站的样子flask-talisman:
from flask import Flask
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_talisman import …Run Code Online (Sandbox Code Playgroud) 我希望将一个bootstrap模板集成到我的烧瓶程序中.具体来说:我下载了此模板的zip文件:
https://startbootstrap.com/template-overviews/sb-admin/
但是,该文件的格式与Flask模板/静态格式完全不同.
我还下载了Flask-Bootstrap(python),但未能准确成功导入模板.
我正在寻找关于如何轻松地将这种类型的模板导入我的烧瓶代码(包括css,jQuery,html等)的建议.谢谢!
Flask-bootstrap自动提供的css文件如下所示:
<link href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)
它是版本3。是否可以在flask-bootstrap中使用bootstrap4?现在,我只是在基本模板中将css和js文件更改为版本4。但是我想知道这是否会带来一些细微的问题。
我在安装Bootstrap Flask扩展后继承了Flask应用程序中的bootstrap/base.html但出现以下错误:
jinja2.exceptions.TemplateNotFound: bootstrap/base.html
Run Code Online (Sandbox Code Playgroud) 我打算在我的烧瓶应用程序中将两个表单放在一个页面中,一个用于编辑一般用户信息,另一个用于重置密码.模板看起来像这样
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block page_content %}
<div class="page-header">
<h1>Edit Profile</h1>
</div>
{{ wtf.quick_form(form_profile, form_type='horizontal') }}
<hr>
{{ wtf.quick_form(form_reset, form_type='horizontal') }}
<hr>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)
每个表单都有一个提交按钮.
在路由功能中,我试图将这两个表单分开
form_profile = ProfileForm()
form_reset = ResetForm()
if form_profile.validate_on_submit() and form_profile.submit.data:
....
if form_reset.validate_on_submit() and form_reset.submit.data:
.....
Run Code Online (Sandbox Code Playgroud)
但它没有用.当我单击ResetForm中的按钮时,将执行ProfileForm验证逻辑.
我怀疑问题是wtf.quick_form()创建两个相同的提交按钮,但不确定.
在这种情况下我该怎么办?bootstrap/wtf.html模板可以处理这种情况吗?
flask ×10
flask-bootstrap ×10
python ×7
jinja2 ×2
bootstrap-4 ×1
https ×1
python-2.7 ×1
ssl ×1
templates ×1