python - 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")
解决方案
基本上你需要了解两件事。
首先,在众多单词中,您只需要返回一个。*
那么,你怎么知道用户已经看到了哪个词呢?
你没有。HTTP 是一种无状态协议。这意味着,每个请求(通过浏览器访问)都独立于另一个请求。
但是您可以解决此限制。
所以,第二,你需要保存状态。并且有几个概念。
从我的头顶上,你可以使用
- 会话
- 饼干
- 或者传递一个参数 eh 当前单词,这样就可以扣除下一个单词
而已。享受您的家庭作业,当您遇到特定问题时,不要犹豫创建一个新问题
- 您还可以返回所有单词,然后通过 Javascript 循环遍历单词。
推荐阅读
- php - 从 Paypal 重定向回来后,Wordpress + WooCommerce 中的会话不一致
- python - 无法使用python播放音频文件
- node.js - 为 myApiClient 获取 customerId
- android - 选中单选按钮时启用 EditText
- scala - Scala:使用闭包时任务不可序列化
- android - React Native Firebase Phone 验证与真实电话号码静默崩溃
- django - Django migrate 失败时回滚多个迁移
- java - 循环解析来自 url 的数据时出现 SSLHandshakeException
- java - MSAL4J 集成 Windows 身份验证 - MSAL4J 代码中的空引用异常
- c - 如何生成一组唯一的随机变量