首页 > 解决方案 > Jinja 2 - 显示我所有的话而不是一个

问题描述

请原谅我的代码,我仍然是一个试图完成学校项目的相对初学者!基本上,我正在尝试创建一个语言学习系统,您可以在其中输入一个单词并检查它是否正确。但是,在learn.html页面上,我的数据库中的所有单词都出现了。我想得到它,以便在您加载页面时有第一个单词,当您单击按钮时,它会检查该单词,从而允许页面显示下一个要翻译的单词。memrise就是一个例子,这个屏幕截图显示了我试图模拟的系统。

我知道这是因为 for 循环,但我尝试了很多解决方案都没有成功。这似乎是一个非常简单的问题,但我真的被困住了。我有 0 JavaScript 专业知识,所以如果可能的话,我会尽量远离 JS 解决方案。我将非常感谢任何可能的帮助:)

学习.html

  {% block content %}
    

    <form class = "form" id="form1" action="/learn/check" methods=["POST"]>
      <td>
        
        <h5> Please enter the spanish for : {% for word in course_content %}{{ word.english }}  {% endfor %} </h5>
      
        <input type="text" name="language_learning_input" id="desc" value="" size="100" maxlength="140"/>
        <p> </p>

      </td>
      <input type="submit" name="button" class="btn btn-success" value="Update"/>
    </form>
  {% endblock content %}

main.py 的片段

#LEARN SYSTEM

#STORING DB VALUES IN LISTS
def spanish():
  #setting variables
  holding_spanish = []

  #running db query
  course_content = db.session.query(Course).all()

  #iterating through db
  for row in course_content:
    holding_spanish.append(row.spanish)
  
  return holding_spanish

def english():
  #setting variables
  holding_english = []

  #running db query
  course_content = db.session.query(Course).all()

  #iterating through db
  for row in course_content:
    holding_english.append(row.english)
  
  return holding_english

def score():
  #setting variables
  holding_score = []

  #running db query
  account_settings = db.session.query(AccountSettings).all()

  #iterating through db
  for row in account_settings:
    holding_score.append(row.words_per_lesson)
  
  return holding_score

#MAIN LEARN PAGE
@app.route("/learn")
def learn():
  #getting values
  english()
  spanish()
  score()
  x=1
  testingvalue = [score()]
  acccount_settings = db.session.query(AccountSettings).all()
  course_content = db.session.query(Course).all()
  return render_template('learn.html', course_content=course_content, acccount_settings=acccount_settings,testingvalue=testingvalue,x=x,english=english)

#ROUTE USED TO CHECK
@app.route("/learn/check", methods =['GET'])
def learncheck():
  course_content = db.session.query(Course).all()
  language_learning_input = request.args.get('language_learning_input')

  for row in course_content:
    if language_learning_input == row.spanish:
      "<h1> correcto! </h1>"
      print("true")
    else:
      "<h1> not correcto! :</h1>"
      print("false")

标签: pythonhtmlflaskjinja2

解决方案


基本上你需要了解两件事。

首先,在众多单词中,您只需要返回一个。*

那么,你怎么知道用户已经看到了哪个词呢?

你没有。HTTP 是一种无状态协议。这意味着,每个请求(通过浏览器访问)都独立于另一个请求。

但是您可以解决此限制。

所以,第二,你需要保存状态。并且有几个概念。

从我的头顶上,你可以使用

  • 会话
  • 饼干
  • 或者传递一个参数 eh 当前单词,这样就可以扣除下一个单词

而已。享受您的家庭作业,当您遇到特定问题时,不要犹豫创建一个新问题

  • 您还可以返回所有单词,然后通过 Javascript 循环遍历单词。

推荐阅读