社区首页 >问答首页 >Jinja2异常-找不到属性

Jinja2异常-找不到属性
EN

Stack Overflow用户
提问于 2019-03-20 21:26:00
回答 2查看 2K关注 0票数 1

在Flask/ Python中处理一个问题。如果这些错误中有几个会弹出,当它们出现时,我就能消除它们;然而,这个错误我似乎无法理解到底。

我有一个简单的表单,允许用户登录。

但是每次加载页面时,都会遇到这样的错误:

jinja2.exceptions.UndefinedError:'shop.forms.LoginForm object‘没有属性'submit'

下面是我正在使用的代码,谢谢。

附注:我已经看到了关于hidden_tag()属性的类似文章,但是建议的修复并不适用于这个场景。

routes.py

代码语言:javascript
代码运行次数:0
复制
import os
from flask import render_template, url_for, request, redirect, flash
from shop import app, db
from shop.models import Author, Book, User
from shop.forms import RegistrationForm, LoginForm
from flask_login import login_user, current_user, logout_user, login_required


@app.route("/login", methods=['GET', 'POST'])
def login():
form = LoginForm()
if request.method == 'POST':
    user = User.query.filter_by(email=form.email.data).first()
    if user is not None and user.verify_password(form.password.data):
        login_user(user)
        return redirect(url_for('home'))
return render_template('login.html', title='Login', form=form)

forms.py

代码语言:javascript
代码运行次数:0
复制
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo

class LoginForm(FlaskForm):
email = StringField('Email', validators=[DataRequired(), Email()])
password = PasswordField('Password', validators=[DataRequired()])
sumbit = SubmitField('Login')

login.html

代码语言:javascript
代码运行次数:0
复制
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>



{% extends "layout.html" %}
{% block content %}

<form method="POST" action="">
    {{ form.csrf_token }}
    <div class="">
        {{ form.email.label }} {{ form.email}}
    </div>
    <div class="">
    {{ form.password.label }} {{ form.password}}
    </div>
    <div class="">
        {{ form.submit() }}
    </div>
</form>

{% endblock content %}

</body>
</html>

编辑:从submit中删除()并不能解决问题。只需从模板中完全删除按钮的实例即可。见下文:

EN

回答 2

Stack Overflow用户

发布于 2019-03-20 22:10:34

form.submit()更改为form.submit,它将在模板中显示提交按钮。

下面是一个将flask_wtf用于登录表单的示例。

使用水瓶wtform的示例:

app.py

代码语言:javascript
代码运行次数:0
复制
from flask import render_template, url_for, request, redirect, flash, Flask
from forms import LoginForm

app = Flask(__name__)
app.secret_key = 'secret key'

@app.route("/login", methods=['GET', 'POST'])
def login():
    form = LoginForm()
    if request.method == 'POST':
        user_email = form.email.data
        user_password = form.password.data
        if user_email and user_password:
            return "{} - {}".format(user_email, user_password)
    return render_template('login.html', title='Login', form=form)

if __name__ == '__main__':
    app.run(debug=True)

forms.py

代码语言:javascript
代码运行次数:0
复制
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField, BooleanField
from wtforms.validators import DataRequired, Length, Email, EqualTo

class LoginForm(FlaskForm):
    email = StringField('Email', validators=[DataRequired(), Email()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Login')

login.html

代码语言:javascript
代码运行次数:0
复制
<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>

<form method="POST" action="">
    {{ form.csrf_token }}
    <div class="">
        {{ form.email.label }} {{ form.email }}
    </div>
    <div class="">
        {{ form.password.label }} {{ form.password }}
    </div>
    <div class="">
        {{ form.submit }}
    </div>
</form>

</body>
</html>

输出:

获取login路由请求:

login路由请求:

更新:

requirements.txt

代码语言:javascript
代码运行次数:0
复制
Click==7.0
Flask==1.0.2
Flask-WTF==0.14.2
itsdangerous==1.1.0
Jinja2==2.10
MarkupSafe==1.1.1
Werkzeug==0.15.0
WTForms==2.2.1

我成功地在我的机器和c9.io中运行了这段代码。

获取/login路由请求(在提交表单之前):

提交表格后:

票数 1
EN

Stack Overflow用户

发布于 2019-03-21 06:24:43

问题解决了!

我没有正确拼写在forms.py中提交

简单的文书错误花了我两个小时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55274250

复制
相关文章
Spring Bean的定义包含哪些内容?
前面我发了一个关于Spring Bean的视频。在这个视频中,我简单提到了Spring Bean的定义。其中,有几位同学就私信我,说老师能不能拍一期关于Spring Bean定义的详细介绍,今天我就来满足大家的要求。关于Spring Bean的定义我一共分为三部分来介绍,首先,介绍Spring Bean声明式配置内容;然后,介绍BeanDefinition与配置文件的关系;最后,介绍Spring如何解析配置文件?
Tom弹架构
2022/08/22
5940
Spring Bean的定义包含哪些内容?
Python基础包含哪些内容?学习什么?
Python基础包含哪些内容?学习什么?学习Python基础了解Python语言起源、设计目标、设计哲学,Python语言的优缺点和面向对象的基本概念、执行方式、集成开发环境PyCharm的使用为Python的深入学习做铺垫。
python学习教程
2021/04/23
6250
Python基础包含哪些内容?学习什么?
使用WiX制作简单MSI安装程序
WiX完全用xml描述,使用命令行来生成。只要用任何一个文本编辑器就可以了。但是为了开发效率,我们还是借助于辅助工具比较好。是一般使用的工具是两个:一个Visual Studio插件,在WiX的安装包里面附带,另一个就是WiXEdit,WixEdit是编辑的XMLXML的源代码的图形化工具箱.WixEdit会让你创造体制条件与MSI和MSM测试wix工具箱.它提供了直观的、轻松的对话方式编辑wix文件来源。 下载和安装 1、下载Wix 3.0版本,目前还是beta。但是已经足够稳定了,可以应用于生产环境。
张善友
2018/01/19
3.7K0
使用WiX制作简单MSI安装程序
python生成安装文件 msi
①.需要在目录下面创建一个文件 。setup.py ②.写入代码: import sys from cx_Freeze import setup, Executable import os os.environ['TCL_LIBRARY'] = r'C:\Python36-32\tcl\tcl8.6' os.environ['TK_LIBRARY'] = r'C:\Python36-32\tcl\tk8.6' include_files=[ r'C:\Python36-32\DLLs\tcl8
py3study
2020/01/13
1.9K0
scp(跨服务区复制文件)和创建文件,文件夹,清空文件夹的内容
1,清空文件夹的内容: $ echo ” ” > aa.log         即 echo ” ” > “要清空的文件” 2,创建文件 $ touch aa.txt 即touch “文件名” 3,创建文件夹 $ mkdir aa 4,创建多级文件夹 $ mkdir aa/aa.txt 5,scp(跨服务区复制文件) scp aa repos@10.250.1.200:/apps scp “文件名”  要复制到的服务器用户名@服务器IP:目录 6,scp(跨服务区复制文件夹) scp -r aa repo
全栈程序员站长
2021/12/23
1.9K0
新手指南|帮助中心应该包含哪些内容?
帮助中心让用户能够通过企业提供的帮助页面对企业产品、使用手册、常见问题进行查询。让用户无需联系企业的客服人员来对常见问题进行解答。让用户能够更加快捷方便的解决问题。
用户9912463
2022/08/18
2800
渗透测试流程包括_渗透测试包含哪些内容
3、确定需求:渗透测试的方向是web应用的漏洞?业务逻辑漏洞?人员权限管理漏洞?还是其他,以免出现越界测试。
全栈程序员站长
2022/11/15
2.1K0
VBA实用小程序72:遍历文件夹(和子文件夹)中的文件
很多时候,我们都想要遍历文件夹中的每个文件,例如在工作表中列出所有文件名、对每个文件进行修改。VBA给我们提供了一些方式:(1)Dir函数;(2)File System Object。
fanjy
2021/04/21
10.6K0
VBA实用小程序72:遍历文件夹(和子文件夹)中的文件
输入两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
学习过程中自己记录一下 import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.I
砖业洋__
2023/05/06
4370
Linux\Mac 递归移除某文件夹下所有文件(不包含文件夹)的执行权限命令
今天别人给了我传了一个文件夹,里面是一个项目代码。我查看了一下,发现所有文件都是有执行权限的。这让我很不爽,于是我将所有文件(不包含文件夹)的执行权限全部去掉。执行命令如下:
FungLeo
2020/06/03
1.6K0
SEO外链推广,为什么除了内容,页面链接也很重要?
在做SEO的过程中,我们都非常清楚链接的重要性,特别是外链推广的时候,我们通常将重点都放在“链接”上,而并没有过多考虑,内容作为链接载体的重要性。 
蝙蝠侠IT
2019/10/23
5490
SEO外链推广,为什么除了内容,页面链接也很重要?
Python 新建文件夹与复制文件夹内所有内容
摘要总结:本篇文章主要介绍了如何使用Python的os和shutil模块实现新建文件夹以及将指定文件夹下的所有内容拷贝到另一个目录的功能。主要包括两个部分:1. 使用os.path.exists判断路径是否存在,再使用os.makedirs创建多级目录;2. 利用shutil.copytree函数实现文件的拷贝。
chaibubble
2018/01/02
2K0
黑盒测试的测试方法有哪些_黑盒测试包含哪些测试内容
一般我们在做软件测试的时候,会遇到黑盒测试,白盒测试,我们今天主要说的是黑盒测试的 主要测试方法有那些。接下来就是干货了。
全栈程序员站长
2022/11/01
1.8K0
黑盒测试的测试方法有哪些_黑盒测试包含哪些测试内容
Git的.ssh文件夹内容介绍
版权声明:博客文章都是作者辛苦整理的,转载请注明出处,谢谢! https://blog.csdn.net/Quincuntial/article/details/52903815
Tyan
2019/05/25
9950
Jupyter病毒重出江湖:寄生于MSI安装程序
以色列动态防御技术公司Morphisec的网络安全研究院日前发布报告,称去年活跃于互联网的Jupyter病毒程序出现了新版本,它仍然狡猾地隐身于各个程序中,窃取用户数据。
FB客服
2021/10/11
8270
【说站】php有哪些文件包含漏洞
1、LFI,本地文件包含漏洞,顾名思义,指的是能打开并包含本地文件的漏洞。大部分情况下遇到的文件包含漏洞都是LFI。
很酷的站长
2022/11/23
8230
PCIe中MSI和MSI-X中断机制
在PCI总线中,所有需要提交中断请求的设备,必须能够通过INTx引脚提交中断请求,而MSI机制是一个可选机制。而在PCIe总线中,PCIe设备必须支持MSI或者MSI-X中断请求机制,而可以不支持INTx中断消息。
碎碎思
2021/08/10
2.2K0
PCIe中MSI和MSI-X中断机制
首批区块链信息备案中,除了BATJ外,还有哪些值得深挖亮点?
近日,国家网信办官网发布第一批境内区块链信息服务备案编号。这是2019年2月15日《区块链信息服务管理规定》(以下简称《管理规定》)正式实施以来,国家互联网信息办公室依法依规组织开展备案审核工作。
区块链大本营
2019/04/28
8610
首批区块链信息备案中,除了BATJ外,还有哪些值得深挖亮点?
php 遍历目录树 (包含空文件夹列表 + 仅有文件列表)
躺平程序员老修
2023/09/05
2150
点击加载更多

相似问题

使用“file”将第2行和第7行打印到文件中

10

如何将200行文件中的第10行到第100行转换为新文件

30

替换匹配模式中的第n行

10

解析csv文件以根据列值中的匹配字符集筛选行

30

删除csv文件中不匹配所需格式的行

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文