【问题标题】:Hide/Show form on button click in Flask在 Flask 中单击按钮时隐藏/显示表单
【发布时间】:2018-12-03 03:33:05
【问题描述】:

我正在学习创建一个 wtf Flask 网络表单,它是:

class Update(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    email = StringField('Email', validators=[DataRequired(), Email()])
    pic = FileField('Update Profile Pic', validators=[FileAllowed(['jpg','png'])])
    submit = SubmitField('Update')

我想要做的是,表单将在单击按钮时加载到同一页面上,而无需为表单创建单独的 html 页面。如何使用 Flask 或 HTML 来完成?如果必须对路线进行任何更改,请同时提及。

HTML 代码:

<div class="content-section">
            <form method="POST" action="" enctype="multipart/form-data">
                {{ form.hidden_tag() }}
                <fieldset class="form-group">
                    <legend class="border-bottom mb-4">Account Info</legend>
                    <div class="form-group">
                        {{ form.username.label(class="form-control-label") }}

                        {% if form.username.errors %}
                        {{ form.username(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.username.errors %}
                            <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                        {% else %}
                        {{ form.username(class="form-control form-control-lg") }}
                        {% endif %}
                    </div>
                    <div class="form-group">
                        {{ form.email.label(class="form-control-label") }}
                        {% if form.email.errors %}
                        {{ form.email(class="form-control form-control-lg is-invalid") }}
                        <div class="invalid-feedback">
                            {% for error in form.email.errors %}
                            <span>{{ error }}</span>
                            {% endfor %}
                        </div>
                        {% else %}
                        {{ form.email(class="form-control form-control-lg") }}
                        {% endif %}
                    </div>
                    <div class="form-group">
                        {{ form.pic.label() }}
                        {{ form.pic(class="form-control-file") }}
                        {% if form.pic.errors %}
                        {% for error in form.picture.errors %}
                        <span class="text-danger">{{error}}</span><br>
                        {% endfor %}
                        {% endif %}
                    </div>
                </fieldset>
                <div class="form-group">
                    {{ form.submit(class="btn btn-outline-info") }}
                </div>
            </form>

【问题讨论】:

    标签: html python-3.x python-2.7 flask backend


    【解决方案1】:

    您可以正常加载表单,并将其可见性设置为hidden。如果有人点击按钮,只需将表单的可见性更改为visible

    下面的例子:

    function toggle_display(){
      el = document.querySelector('.content_section');
      
      if(el.style.visibility == 'hidden'){
          el.style.visibility = 'visible'
      }else{
         el.style.visibility = 'hidden'
      }
    }
    <button onclick="toggle_display()">Toggle display</button>
    
    <div class="content_section">See me no more</div>

    编辑:

    还有一点要提一下,visibility 属性在设置为 hidden 时会占用空间,即使它是隐藏的。要完全删除表单将占用的空间并隐藏表单,请将display 属性设置为none。要再次显示,请将display 设置为block

    【讨论】:

    • 谢谢,你的方法奏效了!但是默认情况下表单是可见的,如何将其默认可见性设置为隐藏?
    • 我尝试使用上述代码的一部分将值设置为“隐藏”,但没有成功
    • 您可以简单地将其作为内联属性 &lt;div class="content_section" style="visibility: hidden;"&gt;See me no more&lt;/div&gt; 。但是请注意,它会占用空间(它只会隐藏表单,但表单会表现得像它仍然存在一样)。要完全隐藏它并删除表单占用的空间,请使用style="display: none;"。如果您决定使用display 属性,再次显示表单,请将显示设置为block
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2016-02-10
    • 2016-05-21
    相关资源
    最近更新 更多