是否可以访问使用jinja2循环的表单输入?

2024-10-01 07:42:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个表单来回答一个用户在html文件中收到的调查

<form method="POST" action="/answerSurvey">
  <ol>
    {% for q in questions %}
    <li>
      <label for="questionBody"><b>{{ q.body }}</b></label>
      <ul style="list-style: none;">
        {% for a in answers %}
        {% if q.id == a.question_id %}
        <li><input type="checkbox" name="{{ a.id }}"> {{ a.body }}</li>
        {% endif %}
        {% endfor %}
      </ul>
    </li>
    {% endfor %}
  </ol>
  <button type="submit">Submit</button>
</form>

我想创建一个函数来接收用户输入,以查看勾选了哪些问题。类似于

@app.route('/answerSurvey', methods=['GET', 'POST'])
@login_required
def answerSurvey():
    question_answers = request.form['something']

所以我可以将它们存储在一个数据库表中,并带有相关的answer.id


Tags: 用户informidforstylebodyli
2条回答
db = SQLAlchemy(app)


class QuestionAnswers(db.Model):
    question_id = db.Column(db.Integer, primary_key=True)
    questions = db.Column(db.String(100), nullable=False)
    answer = db.Column(db.booleen, primary_key=False)


@app.route('/answerSurvey', method=['GET','POST'])
def questions():

    if request.method == 'POST':
        question_id = request.form.get('q.id')
        questions = request.form.get('q')
        answer = request.form.get('checkbox')

        db.session.commit()
    else:
        //do something


我假设您使用的是flask的默认数据库SQL Alchemy。这是一个关系数据库,这意味着数据被组织成行和列。也就是说,您的查询是保存复选框的值。数据的可能性可以简化为选中、未选中或真或假

因此,您所要做的就是在模型数据库中创建一个数据类型booleen,当用户交互并更新它时,将其设置为false(未选中),当用户交互并更新它时,它将更改为true

现在,您必须构造一个路由,或者换句话说,一个将发生此值传输的地址。 若要发布数据,必须添加post in方法。您可以获取所有必须获取数据的html标记并将其发送到数据库中的变量,方法是获取所有必须获取数据的html标记并将其发送到数据库中的变量,获取所有必须获取数据的html标记并将其发送到数据库中的变量必须从中获取数据并将其发送到变量的html标记

为此,必须以可变字典的形式接收数据。 如果发生错误,它是可变的,这意味着以后可能会更改/更新它

error immutibaleMultiDict

使用此选项可以使数据可变

data = request.form.to_dict()

不幸的是,我用另一种方式解决了这个问题。不是最好的,但应该没问题。我所做的只是添加值为1的复选框输入。当答案被勾选时,这将把1写入数据库。因为它只在有勾选的内容时才写入,所以我需要添加一个隐藏的输入字段,所以也会使用未勾选的值。问题是,当用户勾选特定问题的答案时,它首先创建值1,另外创建值0。假设有两个问题,每个问题有两个答案。那么让我们假设每个问题的第一个答案都是正确的。然后我将获得值[1,0,0,1,0,0]。因为我不太擅长JavaScript,所以我使用Python来解决我的问题。我删除了每个1右边的条目

这是我的html新代码。它基本上将复选框的值存储在答案中,当分配多个值时,答案将变为列表。(我假设,它也可能始终是一个列表)无论如何,在调用request.form时,我确实使用了getList()从复选框中获取所有值

<form method="POST" action="/answerSurvey">
  <ol>
    {% for q in questions %}
    <li>
      <label for="questionBody"><b>{{ q.body }}</b></label>
      {% for a in answers %}
      {% if q.id == a.question_id %}
      <input type="checkbox" name="answers" id="answers" value="1">
      <input type="hidden" name="answers" id="answers-hidden" value="0">
      <label for="answers">{{ a.body }}</label>
      <br>
      {% endif %}
      {% endfor %}
    </li>
    {% endfor %}
  </ol>
  <button type="submit">Submit</button>
</form>

这是python中的代码。我正在向后循环,因为删除项目时列表会变小,并且随着索引的增加循环时会导致IndexOutOfBoundsException

@app.route('/answerSurvey', methods=['POST'])
@login_required
def answerSurvey():
    answers_user = request.form.getlist('answers')

    for i in range(len(answers_user)-1, -1, -1):
        if answers_user[i] == '1':
            del answers_user[i + 1]

    ...

    return redirect(url_for('dashboard'))

相关问题 更多 >