当前位置: 首页 > 面试题库 >

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

袁恩
2023-03-14
问题内容

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

我仅加载主页中所有菜单项所需的所有JS(因为我了解到AJAX在a中返回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中使用的数据。



 类似资料:
  • 问题内容: 当我使用Django模板渲染器渲染页面时,可以传入包含各种值的字典变量,以使用来在页面中对其进行操作。 有没有办法在Javascript中访问相同的变量(也许使用DOM,我不知道Django如何使变量可访问)?我希望能够基于传入的变量中包含的值使用AJAX查找来查找详细信息。 问题答案: 将直接替换为HTML。查看资料;它不是“变量”或类似的变量。它只是渲染的文本。 话虽如此,你可以将

  • 问题内容: 我想填充用的与经典ASP / VBScript中的站点。这些值是从SQL Server数据库读取和获取的,其代码类似于: 我的问题是似乎只有一侧可以评估。 随着我得到: 随着我得到: 应该采取什么措施缓解这一问题? 问题答案: 试试这个:

  • 问题内容: 它能够写,甚至。 但是,我找不到要添加值* -1之类的内容。不幸的是,这行不通。 问题答案: 你可以轻松地制作自己的模板标签:

  • 问题内容: 当我使用Django模板渲染器渲染页面时,可以传入包含各种值的字典变量,以使用来在页面中对其进行操作。 有没有办法在Javascript中访问相同的变量(也许使用DOM,我不知道Django如何使变量可访问)?我希望能够基于传入的变量中包含的值使用AJAX查找来查找详细信息。 问题答案: 将直接替换为HTML。查看资料;它不是“变量”或类似的变量。它只是渲染的文本。 话虽如此,你可以将

  • 这就是我的REST控制器的样子 使用以下URI从Postman调用它 得到这个错误 } 我错过了什么?字符串变量的映射不正确吗?

  • 问题内容: 众所周知,通过使用django模板标签“ url”,可以使用一种DRY方式来指向URL,例如 在这里,我希望“ X”是javascript变量的值,例如。但是以下内容不起作用 如何在模板标记中获取值? 问题答案: 我发现了在大多数情况下都可以使用的技巧: 这很干净,并且没有违反DRY原理。