【发布时间】:2019-09-10 22:11:31
【问题描述】:
在尝试读取我在 python/a Flask 视图函数中创建的两个变量时,出现了非常令人沮丧的行为。
我有一个名为experiment.py 的python 程序。有一个路由到 POST 请求的函数,当有人提交表单时它会被执行。在该函数中,我试图返回两个变量:“user_id”包含生成的 user_id,“total_trials”实际上与用户在前一个表单上输入的试验次数相同。
我已经尝试了两种方法来返回这些变量。当前的方法是在 render_template() 中使用data 参数,并将这些变量填充到字典中。
@bp.route('/experiment_app', methods=['GET', 'POST'])
def exp_js_psych_app():
total_trials = int(request.form['trials'])
import random
import string
# Generate a random string
# with 8 characters.
user_id = ''.join([random.choice(string.ascii_letters
+ string.digits) for n in range(8)])
user_id = str(user_id)
generate_stim_for_trials(total_trials, user_id)
return render_template("index.html", data={"user_id": str(user_id), "total_trials":total_trials})
#return render_template("index.html", user_id=user_id, total_trials=total_trials) # also tried to merely just return both variables individually
所以我试图将这两个变量都放入 index.html 上的一些内联 javascript 中。这是代码。
<!DOCTYPE html>
<html>
<head>
<title>My experiment</title>
<script type="text/javascript">
// var trial_total = {{ total_trials }};
var trial_total = {{ data.total_trials }};
console.log(trial_total);
// var user_id = {{ user_id }};
var user_id = String( {{ data.user_id }} ) ;
console.log("USER ID HTML");
console.log(user_id);
</script>
</head>
<body></body>
</html>
你可以看到我已经注释掉了
我能够在这两种方法中成功提取total_trials 变量,没问题。
问题来自 user_id。不管我做什么...... {{ data.user_id }} 或 {{ user_id }} 实际上确实返回了在 python 中生成的字符序列。但问题是这些字符序列不在字符串中/没有引号,它们只是像变量名一样出来。因此,如果 python 应用程序中的 user_id 设置为字符串“12345678”,那么在 Javascript 中,当我使用 Jinja 语法引用 user_id 或 data.user_id 时,我只会得到 12345678,这通常会触发“无法识别的变量” " 错误。
这是我使用检查元素的屏幕截图(试图检查控制台)来说明我的意思
如果我尝试使用String,我只会得到以下信息:var user_id = String(6z9dVPpG);。
那么...这里有什么问题?
请注意,如果我尝试{{ data.user_id|string }},我的控制台中仍然会出现与屏幕截图中相同的内容。
【问题讨论】:
标签: javascript python flask jinja2