烧瓶中的url_for-多个参数-TemplateNotFound

时间:2018-08-06 12:15:43

标签: python flask jinja2

@app.route('/quiz/<quiz_id>/<question_id>', methods=['GET', 'POST'])
@login_required
def quiz(quiz_id, question_id): 
    quiz = Quiz.query.filter_by(id=quiz_id).first()
    qa = Question.query.filter_by(quiz_id=quiz_id).filter_by(id=question_id).first()
    length = Question.query.filter_by(quiz_id=quiz_id).count()

    if request.method =='POST':
        test = request.form[str(question_id)]
        ufq=UserFilledQuiz(user_id=current_user.id, quiz_id=quiz_id, question_id = question_id, \
        answer = request.form[str(question_id)])
        db.session.add(ufq)
        db.session.commit()
        return render_template(url_for('quiz', quiz_id=1, question_id=1), title='Quiz', quiz=quiz, qa=qa, length=length)

    return render_template('quiz.html', title='Quiz', quiz=quiz, qa=qa, length=length)

嗨, 我想使用一种视图进行测验,其中一个站点就是一个问题和答案。 如果我手动编写链接,例如测验/ 1/1或测验/ 1/2-它可以工作。 如果我提交带有答案的表格,则会收到以下消息:jinja2.exceptions.TemplateNotFound: /quiz/1/1当我在网址栏中按Enter时,它会起作用。

1 个答案:

答案 0 :(得分:1)

return render_template(url_for('quiz', quiz_id=1, question_id=1), title='Quiz', quiz=quiz, qa=qa, length=length)行上,对url_for的调用应替换为实际模板的名称,就像下面一行中的'quiz.html'一样。


要进一步诊断问题,您在这里:

当您手动输入URL时,您正在发送GET请求并点击下面的render_template,这将渲染一个名为quiz.html的模板(由于没有错误,因此大概存在)。到目前为止一切顺利。

在通过提交表单发出POST请求时,您将击中上面的render_template,它的第一个参数为url_for。由于您正在访问页面/quiz/1/1,所以这等效于在'/quiz/1/1'调用中将render_template写入模板名称。显然这是不正确的。