javascript - 使用 Jinja 的 "{% break %}"会破坏我的 Javascript 代码。我该如何解决这个问题?

标签 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

我知道这个问题可能很愚蠢而且简单,但我已经搜索了很多,但还没有找到任何人有同样的问题。

有关于如何解决此问题或解决方法的说明吗?

谢谢!

最佳答案

However, I don't want to keep Jinja iterating over the list if the person has already been found.

模板无法确定这一点。模板在查看页面时呈现,而不是在调用函数时呈现 - {% 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 值。此列表也许应该在模板之外生成,以避免在模板文件中放置过多的逻辑。)

关于javascript - 使用 Jinja 的 "{% break %}"会破坏我的 Javascript 代码。我该如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57929726/

相关文章:

javascript - 识别 Javascript 中的按钮按下事件

javascript - 如何以更智能的方式使数字增长和减少?

javascript - 点击每个链接时django加载模式

python - 在 Flask 中渲染部分模板

javascript - 一个用于临时结果的局部范围属性数组是否比许多全局变量更好?

javascript - Fancybox iframe 内容 - 如何从父级访问 CSS?

python - Flask 和 Apache 的 API 错误 500

heroku Gunicorn/Flask 应用程序错误 "Exception in worker process"

python - 用于 Python 应用程序的 Bluemix 日志记录

python - 在 Ansible/Jinja 中过滤字典列表和打印值