当变量值丢失时,Django 模板中的 Javascript 语法错误

2023-12-11

我有一个带有 AJAX 菜单的 Django 模板(单击不同的菜单项会重新加载页面的一部分)。每次菜单单击都会通过 AJAX 调用 Django 视图函数并返回一些要在页面上显示的数据。

我只加载主页中所有菜单项所需的所有 JS(据我所知,AJAX 在 ajax 中返回 JS 不是一个好主意)<div>然后使用 eval() 来执行它)。由于我仅在菜单主页上加载所有 JS,因此在开始时显然不存在其他菜单选项的数据,因为稍后调用相应视图时(单击菜单选项时)会出现数据

因此,像下面这样的代码会在控制台上给出语法错误,因为 JS 仅在第一次解析。

<script> var data = {{se_data|safe}}; </script>

现在,即使在单击菜单选项之后,我也无法使用从视图返回的数据,因为 JS 解析首先失败了。我尝试使用if仅当选择相应的菜单选项时才执行代码,但这也不起作用,因为解析器只是解析所有内容。

我一直在尝试不同的方法来解决这个问题,但似乎找不到有效的方法来解决这个问题。另一种方法是让视图函数首先返回所有数据,但我担心菜单选项和返回的数据可能会随着时间的推移而增长,从而延迟主菜单页面的初始加载。

这是ajax菜单的点击函数:

$(".ent-menu li a").click(function(e) {
    e.preventDefault(); // prevent from going to the page mentioned in href
    // get the href
    var href = $(this).attr("href");

    $("#data_container").load(href, function() {
        load_data(); //this function uses the data variable defined earlier
    });
});

加载菜单主页时我在控制台中看到错误:

Uncaught SyntaxError: Unexpected token ;     at line 1110
data = ;

因为目前还没有数据。


正如所讨论的,您应该使用 JSON 将数据从 Python 发送到 JS;使用JSON.parse()反序列化数据以便在 JS 中使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当变量值丢失时,Django 模板中的 Javascript 语法错误 的相关文章

随机推荐