使用Jinja的“ {%break%}”会破坏我的Javascript代码。我该如何解决?

时间:2019-09-13 20:02:51

标签: javascript flask jinja2

不是双关语...

我对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

我知道这个问题可能是愚蠢而简单的,但是我进行了很多搜索,但是还没有人发现同样的问题。

是否有任何解决方法或解决方法?

谢谢!

1 个答案:

答案 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值。此列表可能应该在模板外部生成,以便避免在模板文件中放置太多逻辑。)