不是双关语...
我对Javascript和Flask还是很陌生...这里的代码:
// searches for a name in the list of persons
function searchFName(){
var userInput = document.getElementById("search").value;
var fname = "";
{% for i in range(persons|length) %}
fname = {{ persons[i].fname|tojson }};
if(userInput == fname)
{
alert(userInput + "found!");
}
{% endfor %}
}
完全正常。遍历人员列表,并检查其名字是否与用户提供的名字匹配...基本上是一种搜索功能。
但是,如果已经找到此人,我不想让Jinja遍历列表。
所以我尝试在此处添加{% break %}
:
if(userInput == fname)
{
alert(userInput + "found!");
{% break %}
}
该功能停止工作,在控制台上给我一个错误:
Uncaught SyntaxError: Unexpected end of input
我知道这个问题可能是愚蠢而简单的,但是我进行了很多搜索,但是还没有人发现同样的问题。
是否有任何解决方法或解决方法?
谢谢!
答案 0 :(得分:2)
但是,如果已经找到此人,我不想让Jinja遍历列表。
模板无法确定。模板是在查看页面时呈现的,而不是在调用函数时呈现的-{% break %}
将始终跳出循环并且不会生成函数的其余部分。出现语法错误是因为{% break %}
导致if
语句的右括号被省略。
最好避免使用模板来生成代码。更好的方法是使整个数组可用于Javascript,然后使用Javascript方法搜索数组:
function searchFName(){
var userInput = document.getElementById("search").value;
var fnames = {{ persons_fnames | tojson }};
if (fnames.indexOf(userInput) !== -1) {
alert(userInput + " found!");
}
}
(请注意,我在这里使用persons_fnames
作为变量或表达式的占位符,该变量或表达式包含每个人的persons[i].fname
值。此列表可能应该在模板外部生成,以便避免在模板文件中放置太多逻辑。)