【问题标题】:jinja2.exceptions.TemplateSyntaxError: expected token 'end of print statement', got '='jinja2.exceptions.TemplateSyntaxError: 预期标记'打印语句结束',得到'='
【发布时间】:2020-09-11 03:03:19
【问题描述】:

尊敬的会员,

我正在创建一个没有数据库设置的基本登录页面。在将 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}}

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

【问题讨论】:

    标签: python css flask flask-wtforms flask-login


    【解决方案1】:

    你可以看到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 构造函数不支持占位符。

    但是,您可以在模板中轻松完成此操作:

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

    【讨论】:

    • 您好 Linh,感谢您的评论。我不认为这个错误是由占位符引起的。即使我只是删除占位符部分,错误仍然存​​在。核心问题是为什么标签不能被格式化?我在上面共享的代码中监督的漏洞是什么?等待您的友好回复。
    • 更改:{{ form.username.label(extra_classes='uname1') }} {{ form.username(placeholder='email here') }}
      {{ form.password.标签(extra_classes='passwd1') }} {{ form.password}}
    • Linh,在我试图将 jinja 模板注入 HTML 的那两行代码中,需要改变什么?你能给我确保用户名和密码标签的格式与提到的类名相对应的代码吗?您分享的链接特别提到了占位符,我的代码对占位符没有重要性。我们可以简单地在我的代码中排除占位符部分。问题是要格式化标签,请指导需要在 HTML 中编写/包含的内容。谢谢
    • {{ form.username.label(extra_classes='uname1') }} {{ form.username() }}
      {{ form.password.label(extra_classes='passwd1') }} {{ form.password}} 即使我删除了占位符部分,用户名和密码标签的格式也没有完成。我在这里缺少什么?寻找您的善意回应。比你
    • jinja2.exceptions.TemplateSyntaxError: expected token 'end of print statement', got '=' 因为你的代码:{{ form.username.label, extra_classes='uname1' }}。它没有 (),你应该改为 {{ form.username.label(extra_classes='uname1') }}。尝试这样做并让我知道结果
    【解决方案2】:

    你可以看到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', [InputRequired()], render_kw={"placeholder": "test"})
    

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

    WTforms 2.0.x 及以下版本的 Python 构造函数不支持占位符。

    但是,您可以在模板中轻松完成此操作:

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

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2022-12-18
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-22
      相关资源
      最近更新 更多