@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时,它会起作用。
答案 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
写入模板名称。显然这是不正确的。