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,0.6);
    }
    .abc{
      color: black;
    }
    .abc1{
      color: black;
    }

请指导,我做错了什么? 我还尝试通过(也使用class而不是class_)将wtf表单的属性注入html:


    {{ form.username.label(class_='uname') }} {{ form.username(placeholder='email here') }}
    {{ form.password.label(class_='passwd')  }} {{ form.password}}

尽管没有收到错误,并且烧瓶应用程序成功运行,并且页面显示了所有相关的样式/格式,但是标签未格式化。

解决方法

您可以看到answer here

已针对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构造函数不支持

placeholder。

但是,您可以在模板中轻松地做到这一点:

{{ form.abc(placeholder="test") }}
,

您可以看到answer here 更改代码,我用pycharm看看

{{ form.username.label(extra_classes='uname1') }} {{ form.username(placeholder='email here') }}
          <br>
          {{ form.password.label(extra_classes='passwd1') }} {{ form.password}}

已针对WTForms 2.1更新

您现在可以从WTForms 2.1(2015年12月)开始使用字段构造函数的render_kw =参数设置渲染关键字。

所以该字段看起来像:

abc = StringField('abc',render_kw={"placeholder": "test"})

(旧答案,对于早于WTForms 2.1的版本仍然适用)

WTforms 2.0.x及更低版本中的Python构造函数不支持

placeholder。

但是,您可以在模板中轻松地做到这一点:

{{ form.abc(placeholder="test") }}