javascript - Jinja - 将元素转换为字符串并调用 JS 函数

标签 javascript python jinja2

我正在使用 PythonFlaskJinja 创建 Web 应用程序。

什么有效:

从Python端,我有一个列表my_list = ["Rome", "Milan", "Bari", "Naples"],它用于通过Jinja填充渲染到的HTML模板页面客户感兴趣的内容。

<ul>
   {% for n in my_list %}
   <button>{{n}}</button>
   {% endfor %}
</ul>

结果:

<button>Rome</button>
<button>Milan</button>
<button>Bari</button>
<button>Naples</button>

enter image description here

什么不起作用:

我现在想触发一个 JS 函数,该函数应该输出以控制台接收到的字符串参数(例如“Rome”、“Milan”、“Bari”、“Naples”,现在代表包含的名称)通过各种按钮)

<script>
    function foo(parameter) {
         console.log(parameter);
    }
</script>

为了做到这一点,我修改了 Jinja 模板部分,如下所示:

<ul>
    {% for n in my_list %}
    <button onclick="foo({{n}})">{{n}}</button>
    {% endfor %}
</ul>

问题是,当我按下按钮(例如罗马)时,我在 JS 控制台中收到以下错误:

Uncaught ReferenceError: Rome is not defined

当然,我能够理解发生这种情况因为 Rome 没有定义,而且 Rome 不是一个字符串(这是我需要它才能正确进行函数调用) .

所以我的问题是如何将 Rome 转换为 "Rome"

我有兴趣了解如何将 Jinja 元素转换为 string 数据类型。

我对 Jinja 不太熟悉,非常感谢任何帮助。

最佳答案

Jinja 渲染字符串变量时不带任何引号。所以:

<button onclick="foo({{n}})">{{n}}</button>

变成

<button onclick="foo(Rome)">Rome</button>

...这显然会让 JS 引擎寻找名为 Rome 的变量。

只需在其周围加上自己的引号即可使其成为 JS 中的字符串:

<button onclick="foo('{{n}}')">{{n}}</button>

<button onclick="foo('Rome')">Rome</button>

关于javascript - Jinja - 将元素转换为字符串并调用 JS 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54308638/

相关文章:

javascript - 可能有一个独立的 JS/HTML (jQuery) 文件,在本地模拟 AJAX 调用?

python - 使用 pandas 将日期、时间和纳秒解析为日期时间对象

python - 计算数组列表的计数百分比

java - 在 App Engine 上使用 Java 中的 Python 代码

python - 如何在发布链接时将 youtube 视频嵌入到您的网页中

javascript - 将文档存储在变量中

javascript - NodeJS 在第二次用户 session 后显示不同的 MySQL 结果

javascript - 使用 Flask 提取 JavaScript 变量

javascript - 点击模态确定按钮时,按模态使用次数触发点击,无需刷新页面

python - Numba - nopython 模式比对象模式慢?