【问题标题】:Flask/SQLalchemy/Jinja2 -- nested loop renderingFlask/SQLalchemy/Jinja2 -- 嵌套循环渲染
【发布时间】:2015-03-10 04:08:52
【问题描述】:

我是 Flask 的初学者。我正在构建一个简单的测验应用程序。我有两张桌子。一个是问题表,另一个是带有一个正确答案的选项表。我想展示一个问题和四个选项,然后是第二个问题,依此类推。 我到处搜索如何渲染到模板中。卡了路障。尝试了不同的惰性选项。

Model.py
class Question(db.Model):
__tablename__ = 'edu_word_questions'
question_id = db.Column(db.Integer, primary_key = True)
word = db.Column(db.String(100))
question_type = db.Column(db.String(100))
answers = db.relationship('Question_answers', backref='Question',
                            lazy='subquery')

class Question_answers(db.Model):
__tablename__ = 'edu_question_answers'
answer_id = db.Column(db.Integer, primary_key=True)
answer = db.Column(db.String(100))
question_id = db.Column(db.Integer, db.ForeignKey('edu_word_questions.question_id'))

routes.py
@app.route('/quiz')
def quiz():
  quiz = db.session.query(Question, Question_answers).join(Question_answers,Question.question_id == Question_answers.question_id)
# quiz = db.session.query(Question).all()
# answers = db.session.query(Question_answers).all()
return render_template('quiz.html', quiz=quiz)

HTML 
{% for key,value in quiz %}
 <li><h2>{{ word }}</h2>
 <li><h2>{{ answer }}</h2>
{% endfor %}

【问题讨论】:

    标签: python flask jinja2 flask-sqlalchemy


    【解决方案1】:

    您的循环不是一本字典,因此不太合理。由于您在问题中有答案,您可以直接抓取问题,并在运行时自动抓取答案,因为当您在模板中迭代 q.answers 时,它是延迟加载的。

    routes.py

    @app.route('/quiz')
    def quiz():
        questions = db.session.query(Question).all()
        return render_template('quiz.html', questions=questions )
    

    HTML

    {% for q in questions %}
     <li><h2>{{ q.word }}</h2>
        {% for a in q.answers %}
            <li><h2>{{ a.answer }}</h2>
        {% endfor %}
    {% endfor %}
    

    【讨论】:

    • 非常感谢您的帮助。是的,它解决了我的烂摊子。真的很感激。
    • @Chambana 很高兴我能提供帮助。如果它回答了您的问题,请在左侧将其勾选为已接受的答案。
    猜你喜欢
    • 2017-12-30
    • 2019-01-16
    • 1970-01-01
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多