Найти - Пользователи
Полная версия: Label в WTForms что то не хочет
Начало » Web » Label в WTForms что то не хочет
1
Koala
изучаю WTForms,
хочу рядом с полями в форме надпись написать - ну стало быть тег label
в доке таких примеров нет, пытаюсь понять сам


 #
class RegisterForm(Form):
    username = StringField('Username', validators=[Required(), Length(1, 16)])
    password = PasswordField('Password', validators=[Required()])
    password2 = PasswordField('Password2', validators=[Required()])
    #label = Label(password2, 'metka_label')
    label = Label('Это метка', 'metka_label')
    # form.label =  <label for="Это метка">metka_label</label>
на это label = Label('Это метка', ‘metka_label’)
в переменной form.label = <label for=“Это метка”>metka_label</label>
есть вот то, но на экране в форме оно не появляется,
а другие поля появляются.

В обычном html-е label не обязательно должна
привязаться через for к реальному элементу, Все равно она
свой текст показывает,
например отдельно стоящий label сработает (check1 нету):
<label for=“check1”>Lorem Ipsum</label>

А тут в форме (WTF) label не образуется, и не знаю что делать.
==========
саму Label импортировал, если что.

да, а вот где используется:
 #
@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        print('form.label = ', form.label)
        # показывает, что есть: form.label =  <label for="Это метка">metka_label</label>
        # а на экране - нет!!! смотрю исходный код 
        # страницы формы в браузере - метки нет !!!
        # остальные поля есть, и даже работают !
........


вот все мои импорты, естественно в программе они в самом начале, Label среди них есть:

from werkzeug.security import generate_password_hash, check_password_hash
from flask import Flask, render_template, redirect, url_for, request
from flask_bootstrap import Bootstrap

from flask_wtf import Form
from wtforms import StringField, PasswordField, BooleanField, SubmitField
from wtforms import Label


from wtforms.validators import Required, Length
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, logout_user, \
login_required
4kpt_IV
Покажите как Вы форму выводите в jinja.
Koala
 #
@app.route('/register', methods=['GET', 'POST'])
def register():
    form = RegisterForm()
    if form.validate_on_submit():
        print('form.label = ', form.label)
        # показывает, что есть: form.label =  <label for="Это метка">metka_label</label>
        # а на экране - нет!!! смотрю исходный код 
        # страницы формы в браузере - метки нет !!!
        # остальные поля есть, и даже работают !
........
    return render_template('registter.html', form=form)

раздела Jinja2 + Flask в редакторе нет :-)
потому выбрал html+django

сначала base.html:
(там еще flask-bootstrap используется, потому такие extends-ы)
но директории bootstrap в моих templates нет, а bootstrap таки работает,
следовательно берет “из недр” site-packages

так вот base.html:
 {% extends "bootstrap/base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Login Example{% endblock %}
{% block navbar %}
    <nav class="navbar navbar-inverse" role="navigation">
        <div class="container">
            <a class="navbar-brand" href="{{ url_for('index') }}">
                Login Example
            </a>
            <ul class="nav navbar-nav">
                <li><a href="{{ url_for('index') }}">Home</a></li>
                <li><a href="{{ url_for('protected') }}">Protected</a></li>
            </ul>>
            <ul class="nav navbar-nav navbar-right">
                <li>
                    {% if current_user.is_authenticated %}
                        <a href="{{ url_for('logout') }}">Logout</a>
                    {% else %}
                        <a href="{{ url_for('login') }}">Login</a>
                    {% endif %}
                </li>
            </ul>
        </div>
    </nav>
{% endblock %}
{% block content %}
    <div class="container">
        {% block page_content %}{% endblock %}
    </div>
{% endblock %}

и registter.html:
 {% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %} Register {% endblock %}
{% block page_content %}
    <h1> Register </h1>
    <div class="row">
        <div class="col-md-3">
            {{ wtf.quick_form(form) }}
        </div>
    </div>
{% endblock %}
вот ведь только это:
{{ wtf.quick_form(form) }}
я собственно wtf плохо знаю, может чего еще ему надо?

4kpt_IV
wtf.html нужен
sander
Koala
макрос рендера не будет рендерить отдельно лейбл, ренедрит только поля целиком
Koala
sander
Koalaмакрос рендера не будет рендерить отдельно лейбл, ренедрит только поля целиком

Спасибо, но я человек скудоумный, нельзя ли поподробнее.

вот у меня форма
 #
class RegisterForm(Form):
    username = StringField('Username', validators=[Required(), Length(1, 16)])
    password = PasswordField('Password', validators=[Required()])
    password2 = PasswordField('Password2', validators=[Required()])
    #label = Label(password2, 'metka_label')
    label = Label('Это метка', 'metka_label')
    # form.label =  <label for="Это метка">metka_label</label>
StringField, PasswowrdField, PasswordField значит отгенерировал, а тут вдруг (рядом!) Label - и не хочет!
Ну хорошо, в чужой монастырь со своим протоколом http не ходят, что же мне делать, если я хочу Label (или не Label) - но что-то “от себя” написать на форме? Просто выводить отдельную переменную, как в доисторические времена? Пожаловаться Армину Ронахеру? Или какие еще другие ритуальные пляски совершить? Да и она же ж генерируется - я же специально плоды трудов label в переменную загонял, и смотрел, там же тег <label> есть!
print('form.label = ', form.label)
вот результат этой команды в консоли:
form.label = <label for=“Это метка”>metka_label</label>
то бишь оно там живое!!!


Koala
4kpt_IV
wtf.html нужен

Спасибо, помогло.
Посмотрел я на wtf.html, что в
…Lib\site-packages\flask_bootstrap\templates\bootstrap\wtf.html

поискал я там слово label, и настигло меня просветление (правда, увы, только местное :-) )
и вставил я в свой шаблон фразу, взятую из wtf.html:

{{ form.label.text|safe }}

и заработало оно!
ну что-ж, и это хорошо.
Ну правда не внутри формы, а рядышком, но на безрыбье и крокодайл - рыба.
4kpt_IV
Вообще лучше все же форму собирать самому.
Я когда-то напили для себя универсальный шаблон и импортирую его где надо и где не надо…
sander
Koala
сам создавай html форму и рендери отдельные поля (wtf.form_field)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB