python - jinja2.exceptions.TemplateSyntaxError: 预期标记'打印语句结束',得到'='
问题描述
尊敬的会员,
我正在创建一个没有数据库设置的基本登录页面。在将 jinja 模板传递给 html 文件时,我不确定自己做错了什么。
.py 文件:
from flask import Flask, render_template, flash, session, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField,SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'kmykey'
class SimpleForm(FlaskForm):
username = StringField("Username:", validators=[DataRequired()])
password = StringField("Password:", validators=[DataRequired()])
submit = SubmitField("Submit")
@app.route('/', methods = ['GET', 'POST'])
def index():
form = SimpleForm()
if form.validate_on_submit():
session['username'] = form.username.data
session['password'] = form.password.data
return redirect(url_for('index'))
return render_template('Login_Page1.html', form=form)
if __name__ == '__main__':
app.run()
html文件:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Ticket Booking</title>
<link rel="stylesheet" type= "text/css" href=" {{ url_for('static',filename='Login_Page1.css') }}">
<link href="https://fonts.googleapis.com/css2?family=Anton&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
<!-- JS, Popper.js, and jQuery -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</head>
<body>
<div align="center" class="main1">
<form method="POST">
<h1>Railway Booking Portal</h1>
<h2>Welcome!</h2>
<br>
{# This hidden_tag is a CSRF security feature. #}
{{ form.hidden_tag() }}
{{ form.username.label, extra_classes='uname1' }} {{ form.username(placeholder='email here') }}
<br>
{{ form.password.label, extra_classes='passwd1' }} {{ form.password}}
<br>
<a class="abc" href="Sign_Up.html"><u>SignUp</u></a>
<br>
<a class="abc1" href="Password_Reset.html"><u>ForgotPassword</u></a>
<br>
<br>
{{ form.submit() }}
<br>
<p>"One's destination is never a place, but a new way of seeing things." - Henry Miller</p>
</form>
</div>
该css文件:
body{
background: url(railway-tracks.jpeg);
background-repeat: no-repeat;
}
h1{
color: black;
}
p{
font-family: 'Anton', sans-serif;
font-size: 200%;
color: black;
}
.uname1{
display: inline-block;
min-width: 90px;
color: red;
}
.passwd1{
display: inline-block;
min-width: 90px;
color: red;
}
.main1{
background-color: rgba(255, 255, 255, 0.6);
}
.abc{
color: black;
}
.abc1{
color: black;
}
请指导,我做错了什么。我还尝试通过(也使用类而不是类_)将 wtf 表单的属性注入到 html:
{{ form.username.label(class_='uname') }} {{ form.username(placeholder='email here') }}
{{ form.password.label(class_='passwd') }} {{ form.password}}
虽然没有收到错误,并且成功运行烧瓶应用程序并且页面显示了所有相关的样式/格式,但标签未格式化。
解决方案
你可以在这里看到答案
为 WTForms 2.1 更新
从 WTForms 2.1(2015 年 12 月)开始,您现在可以使用字段构造函数的 render_kw= 参数设置渲染关键字。
所以该字段看起来像:
abc = StringField('abc', [InputRequired()], render_kw={"placeholder": "test"})
(旧答案,对于早于 WTForms 2.1 的版本仍然适用)
WTforms 2.0.x 及更低版本的 Python 构造函数不支持占位符。
但是,您可以在模板中轻松执行此操作:
{{ form.abc(placeholder="test") }}
推荐阅读
- sharepoint-online - SharePoint Online - React 现代脚本编辑器 - 安装问题
- r - 数据框中每组的一组选定列的 JSON 汇总列
- android - 捕获错误但继续迭代列表
- python - 有谁知道如何设置具有升级和降级特殊要求的条带特定订阅?
- javascript - 是否可以通过应用程序脚本知道谁是最后修改事件的用户
- java - java - 如何根据用户在java中的输入(扫描仪)计算脚本中的字符串、数字和双精度数?
- node.js - 将文件从 Angular 发送到 Nodejs - 无法读取未定义的属性“标题”
- java - iot-service-client azure-iot-sdk java 的企业代理
- javascript - React 组件中状态的更新时间问题(需要单击 2 次而不是 1 次)
- reactjs - gatsby remark 图片不显示图片