Атрибут id
Атрибут id принадлежит классу Field из библиотеки WTForms, с которой работает Flask.
Он хранит строку - HTML-идентификатор поля формы, который подставляется в атрибут id тега input
при рендеринге. Если идентификатор не задан явно, WTForms генерирует его автоматически
из имени поля с префиксом id_, например id_name для поля name.
Значение id можно переопределить при создании поля через параметр id
или позже, присвоив новое значение. Атрибут удобно использовать для связки поля с тегом
label через атрибут for, а также для обращения к элементу из JavaScript или CSS.
Синтаксис
field.id
Значение по умолчанию формируется как 'id_' + field.name.
Пример
Давайте создадим форму с полем и выведем его идентификатор по умолчанию:
from flask import Flask
from wtforms import Form, StringField
app = Flask(__name__)
class MyForm(Form):
name = StringField('Name')
form = MyForm()
@app.route('/')
def index():
res = form.name.id
return str(res)
Результат выполнения кода:
"id_name"
Пример
Давайте зададим собственный идентификатор при создании поля:
from flask import Flask
from wtforms import Form, StringField
app = Flask(__name__)
class MyForm(Form):
name = StringField('Name', id='user_name')
form = MyForm()
@app.route('/')
def index():
res = form.name.id
return str(res)
Результат выполнения кода:
"user_name"
Пример
Атрибут id можно изменить после создания поля, присвоив новое значение:
from flask import Flask
from wtforms import Form, StringField
app = Flask(__name__)
class MyForm(Form):
name = StringField('Name')
form = MyForm()
form.name.id = 'abcde'
@app.route('/')
def index():
res = form.name.id
return str(res)
Результат выполнения кода:
"abcde"
Пример
Давайте используем id для связки поля с меткой в шаблоне:
from flask import Flask, render_template
from wtforms import Form, StringField
app = Flask(__name__)
class MyForm(Form):
name = StringField('Name')
@app.route('/')
def index():
form = MyForm()
return render_template('index.html', form=form)
Шаблон:
<label for="{{ form.name.id }}">{{ form.name.label }}</label>
{{ form.name }}
Результат выполнения кода:
<label for="id_name">Name</label>
<input id="id_name" name="name" type="text" value="">