首页 > 解决方案 > 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}}

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

标签: pythoncssflaskflask-wtformsflask-login

解决方案


你可以在这里看到答案

为 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") }}

推荐阅读