【问题标题】:How to use hidden input in an html form with Python+Jinja2如何使用 Python+Jinja2 在 html 表单中使用隐藏输入
【发布时间】:2014-05-29 06:21:10
【问题描述】:

当我将此行放入我的 html 模板时,我可以通过 jinja2 变量成功地将输入字符串传递到我的 Python 代码中...

<label for="firstName">First name*</label>
<input type="text" name="fname" id="firstName" value="{{ fname }}">

但是,当我尝试使用以下行传递隐藏输入时...

<input type="hidden" name ="contact_form" value="{{ active_form }}">

...我没有看到值传递回我的 Python 代码。我还没学过Javascript。是否需要一些 Javascript 来传递隐藏的输入值?我错过了什么?

【问题讨论】:

  • 这应该在您发布数据时工作并通过。但请确保此隐藏输入是您提交的表单的一部分。
  • 我知道这已经过时了,但你最终弄明白了吗?我对烧瓶有同样的问题。

标签: python html forms input jinja2


【解决方案1】:

我推荐使用WTForms

示例

from wtforms import TextField, validators, PasswordField, TextAreaField, HiddenField    
class ArticleCreateForm(Form):
        title = TextField('Title', [validators.Required("Please enter title.")],
                          filters=[strip_filter] )
        body = TextAreaField('Body', [validators.Required("Please enter body.")],
                             filters=[strip_filter])
        category = QuerySelectField('Category', query_factory=category_choice )
        person_name = HiddenField()

views.py

@app.route('/create', methods=['GET', 'POST'])
def article_create():
    if 'email' not in session:
        return redirect(url_for('signin'))
    person = Person.query.filter_by(email=session['email']).first()
    name = person.firstname
    article = Article()
    form = ArticleCreateForm()
    form.person_name.data = person.firstname
    if form.validate_on_submit():
        form.populate_obj(article)
        db.session.add(article)
        db.session.commit()
        return redirect(url_for('index'))
    return render_template('create.html', form=form, person=person, name=name)

【讨论】:

    【解决方案2】:

    我知道这是一篇旧帖子,但我在玩一个 Jinja 模板,我想解决这个特殊问题,因为我自己正在处理它。我打算通过传入我的值并在连接字符串中添加引号 (") 以及我的 Jinja 变量(名为“ticket_number”)来欺骗 Jinja,如下所示:

    <input class="hidden" name="ticket_number" value={{ ticket.ticket_number + '"' }}>
    

    那是行不通的。所以我删除了连接并直接传递了变量。这似乎很有希望。原以为 HTML 代码将包含变量值而没有引号括起来,但现在惊讶地发现 Jinja 或 Flask 正确地引用了变量,而没有使用直接变量值进行额外的附加:

    <input class="hidden" name="ticket_number" value={{ ticket.ticket_number }}>
    

    变量本身是一个整数,所以我确认了常规字母数字字符串变量是否也会发生这种情况。让我知道它是否适合你们所有人-

    【讨论】:

      【解决方案3】:

      如果您将 Flask 与 Jinja2 一起使用(我会推荐),您可以在视图函数中运行如下代码:

      from flask import request
      
      @app.route('/path/to/submit/page', methods=["GET","POST"])
      def viewfunctionforsubmitpage():
        request.form['contact_form']
      

      Flask 是一个不错的、轻量级的,并且使用 Jinja2 构建,所以这很好。

      【讨论】:

        猜你喜欢
        • 2015-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多