‘forms.ContactForm object’ не имеет атрибута ‘hidden_tag’

Я пытаюсь создать контактную форму, используя флягу, но продолжаю получать эту ошибку при рендеринге страницы.

'forms.ContactForm object' has no attribute 'hidden_tag' 

Вот мои файлы:

contact.html

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

Contact

{{ form.hidden_tag() }} {{ form.name.label }} {{ form.name }} {{ form.email.label }} {{ form.email }} {{ form.subject.label }} {{ form.subject }} {{ form.message.label }} {{ form.message }} {{ form.submit }}
{% endblock %}

forms.py

 from flask.ext.wtf import Form from wtforms import Form, TextField, TextAreaField, SubmitField, validators class ContactForm(Form): name = TextField("Name", [validators.Required()]) email = TextField("Email",[validators.Required(), validators.email()]) subject = TextField("Subject", [validators.Required()]) message = TextAreaField("Message", [validators.Required()]) submit = SubmitField("Send") 

routes.py

 from flask import Flask, render_template, request from forms import ContactForm app = Flask(__name__) app.secret_key = 'development key' @app.route('/') def home(): return render_template('home.html') @app.route('/about') def about(): return render_template('about.html') @app.route('/contact', methods=['GET', 'POST']) def contact(): form = ContactForm() if request.method == 'POST': return 'Form posted.' elif request.method == 'GET': return render_template('contact.html', form=form) if __name__ == '__main__': app.run(debug=True) 

Все остальные шаблоны страниц работают отлично. Любой совет будет потрясающим! Спасибо за помощь!

Solutions Collecting From Web of "‘forms.ContactForm object’ не имеет атрибута ‘hidden_tag’"

Ошибка, которую вы видите, сообщает вам, что forms.ContactForm не имеет метода под названием «hidden_tag». Вы ссылаетесь на этот метод на 6-й строке contact.html следующим образом:

 {{ form.hidden_tag() }} 

Согласно документации на флягу, это правильный способ реализации защиты CSRF .

Я бы начал с удаления строки, которая ссылается на «form.hidden_tag ()», а затем посмотрите, работает ли ваша форма. Затем вернитесь и внедрите защиту CSRF в соответствии с этими инструкциями из документации.

Я просто исправил эту проблему.

Ваша проблема заключается в том, что вы дважды импортировали форму, создавая бесполезность импорта флеш-wtf.

 from flask_wtf import Form from wtforms import Form, TextField, TextAreaField, SubmitField, validators # ^^^ Remove 

Только расширение flask-wtf имеет специальный class Form который может обрабатывать CSRF автоматически / другое.

Мне потребовалось некоторое время, чтобы исправить это.

Первая форма импорта, поля, бутстрап:

 from flask_wtf import Form from wtforms import StringField #etc from flask_bootstrap import Bootstrap 

Конфигурировать секретный ключ и бутстрап

 app = Flask(__name__) app.config['SECRET_KEY'] = 'secret key' Bootstrap(app) 

создайте свою форму как используемую для:

 class ContactForm(Form): name = TextField("Name", [validators.Required()]) email = TextField("Email",[validators.Required(), validators.email()]) subject = TextField("Subject", [validators.Required()]) message = TextAreaField("Message", [validators.Required()]) submit = SubmitField("Send") 

Ничего особенного в маршрутизации, просто верните его нормальным образом.

В html:

 {% extends "bootstrap/base.html" %} {% import "bootstrap/wtf.html" as wtf %} {% if form %} {{ wtf.quick_form(form, ) }} {% endif %} 

Вот и все. Надеюсь, вы найдете некоторые (или все) из них полезными.

Я попытался это исправить. После удаления скобок «()», добавленного после hidden_tag, он работает.

{{ form.hidden_tag }}