缺少变量值时Django Template中的Javascript语法错误

时间:2017-04-21 08:09:25

标签: javascript jquery ajax django django-templates

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

我只加载主页面中所有菜单项所需的所有JS(因为我了解到AJAX在<div>中返回JS然后使用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 = ;

因为数据尚未公布。

1 个答案:

答案 0 :(得分:1)

如上所述,您应该使用JSON将数据从Python发送到JS;使用JSON.parse()反序列化要在JS中使用的数据。