【问题标题】:Flask wtforms own styleFlask wtforms 自己的风格
【发布时间】:2015-06-19 10:38:47
【问题描述】:

我想用flask注册:

@app.route('/register/', methods=['GET','POST'])
def register():
    form = RegistrationForm(request.form)
    if request.method == 'POST' and form.validate():
        username = form.username.data
        mail = form.mail.data
        password = sha256_crypt.encrypt((str(form.password.data)))
        c, conn = dbconnect.conn()
        x = c.execute("SELECT * FROM users WHERE username = (%s)", (thwart(username)))
        if int(x) > 0:
            flash("This username is already taken. Please choose another!")
            return render_template("register.html", form=form, nav=8)
        else:
            c.execute("INSERT INTO users (username, password, mail, credits, settings, rank, items) VALUES (%s, %s, %s, %s, %s, %s, %s)",
                thwart(username), thwart(password), thwart(mail), thwart(100), thwart(""), thwart(1), thwart(""))
            conn.commit()
            flash("You are successfully registered!")
            c.close()
            conn.close()
            gc.collect()
            session['logged_in'] = True
            session['username'] = username
            return redirect(url_for('dashboard'))
    return render_template("register.html", form=form, nav=8)

我正在使用如您所见的 wtforms。 问题是,我的注册页面是:

{% extends "default.html" %}

{% block body %}

<h4>Register</h4>
<form action="" method="post">
    {% from "_formhelpers.html" import render_field %}
    {{ render_field(form.username) }}
    {{ render_field(form.mail) }}
    {{ render_field(form.password) }}
    <p><input class="btn btn-primary form-control" type="submit" value="Register"></p>
</form>

{% endblock %}

所以 render_field 定义如下:

{% macro render_field(field) %}
{{ field(**kwargs)|safe }}
{% endmacro %}

但是文本框只是默认样式,所以没有占位符也没有样式。我正在使用引导程序并希望它们的格式如下:

<p><input type="text" class="form-control" placeholder="{{ field.label }}" name="{{ field.label }}" value=""></p>

如何设置它们的样式?

【问题讨论】:

    标签: python css twitter-bootstrap flask wtforms


    【解决方案1】:

    您可以将class_ kwargs 传入render_field 中的field() 调用。

    {% macro render_field(field) %}
    {{ field(class_="form-control", **kwargs) }}
    {% endmacro %}
    

    【讨论】:

    • 嘿,谢谢!还有如何传递占位符?
    【解决方案2】:

    我们可以这样写

    {% macro render_field(name, class='class-name', value='', type='text') -%}
    <input type="{{ type }}" name="{{ name }}" class="{{ class }}"
    value="{{ value }}"/>
    {%- endmacro %}
    

    您的情况

    {% macro render_field(name, class='form-control', type='text') %}
    {{ field(**kwargs | safe) }}
    {% endmacro %}
    

    您始终可以在渲染字段时应用自己的样式。

    【讨论】:

      【解决方案3】:

      顺便说一句,这个问题在标题中省略了“render_template”,您可以直接传递格式...

      <div class="input-group input-group-sm">    
      {{ form.username.label(for='username', class="input-group-addon") }}
      {{ form.username(class="form-control", id="username", placeholder="Username...") }}
      </div>
      

      您也可以提供样式等。如果您只是显示几个字段,这非常方便。但是它不适用于 render_template,或者至少它不适用于我。

      【讨论】:

        猜你喜欢
        • 2013-02-19
        • 2021-03-04
        • 2010-12-11
        • 2013-12-24
        • 2018-09-03
        • 1970-01-01
        • 2021-09-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多