【问题标题】:Flask WTForms search bar on all pages of website网站所有页面上的 Flask WTForms 搜索栏
【发布时间】:2021-01-08 01:50:25
【问题描述】:

我正在尝试在我的 Flask 网站的每个页面上实现 WTForms 搜索功能。我想避免为每个 Python 函数创建表单。

目前,我为每个函数生成QuickSearchForm() 并将其传递到每个页面。但是,我更愿意定义一次,然后自动加载到每个网页上。

WTForms 可以做到这一点吗?

这是当前 Python 代码的 sn-p:

...

class QuickSearchForm(FlaskForm):
    name = StringField(
        render_kw={"placeholder": "Quick Search"}
    )

...

@bp.route('/')
def home():
    quicksearch = QuickSearchForm()
    return render_template('index.html', quicksearch=quicksearch)


@bp.route('/content')
def content():
    quicksearch = QuickSearchForm()
    return render_template('content.html', quicksearch=quicksearch)


@bp.route('/quick_search', methods=('GET', 'POST'))
def quick_search():
    quicksearch = QuickSearchForm()
    if request.method == 'POST':
        return render_template('results.html', results=results, quicksearch=quicksearch)
    return render_template('home.html', quicksearch=quicksearch)
    

以及表单的 HTML:

<form method="POST" action="{{ url_for('home.quick_search') }}">
    <fieldset class="form-field">
        {{ quicksearch.name }}
        {% if quicksearch.name.errors %}
        <ul class="errors">
            {% for error in quicksearch.name.errors %}
            <li>{{ error }}</li>
            {% endfor %}
        </ul>
        {% endif %}
    </fieldset>
    {{ quicksearch.hidden_tag() }}
</form>

我宁愿在__init__ 中定义quicksearch 并完成。

【问题讨论】:

    标签: python html flask flask-wtforms wtforms


    【解决方案1】:

    是的,定义自己的 render_template 函数可能最简单:

    def render_template_form(template, **kwargs):
        quicksearch = QuickSearchForm()
        return render_template(template, quicksearch=quicksearch, **kwargs)
    

    然后在你自己的函数中替换:

    @bp.route('/')
    def home():
        return render_template_form('index.html')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-07-31
      相关资源
      最近更新 更多