Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 19, 2016 02:43:45

Koala
Зарегистрирован: 2015-10-28
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

изучаю 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

Офлайн

#2 Сен. 19, 2016 08:15:08

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

Покажите как Вы форму выводите в jinja.

Офлайн

#3 Сен. 19, 2016 13:06:45

Koala
Зарегистрирован: 2015-10-28
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

 #
@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 плохо знаю, может чего еще ему надо?

Офлайн

#4 Сен. 19, 2016 13:12:22

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

wtf.html нужен

Офлайн

#5 Сен. 19, 2016 18:04:46

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

Koala
макрос рендера не будет рендерить отдельно лейбл, ренедрит только поля целиком

Офлайн

#6 Сен. 19, 2016 22:26:24

Koala
Зарегистрирован: 2015-10-28
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

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 (Сен. 19, 2016 23:01:53)

Офлайн

#7 Сен. 19, 2016 22:44:16

Koala
Зарегистрирован: 2015-10-28
Сообщения: 59
Репутация: +  0  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

4kpt_IV
wtf.html нужен

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

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

{{ form.label.text|safe }}

и заработало оно!
ну что-ж, и это хорошо.
Ну правда не внутри формы, а рядышком, но на безрыбье и крокодайл - рыба.

Отредактировано Koala (Сен. 19, 2016 23:00:35)

Офлайн

#8 Сен. 19, 2016 23:14:45

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

Вообще лучше все же форму собирать самому.
Я когда-то напили для себя универсальный шаблон и импортирую его где надо и где не надо…

Офлайн

#9 Сен. 20, 2016 21:34:06

sander
Зарегистрирован: 2015-02-19
Сообщения: 317
Репутация: +  53  -
Профиль   Отправить e-mail  

Label в WTForms что то не хочет

Koala
сам создавай html форму и рендери отдельные поля (wtf.form_field)

Отредактировано sander (Сен. 20, 2016 21:34:14)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version