我正在尝试在 jquery 脚本中使用 django 上下文变量。
首先,这有效:
index.html
<head>
<script type="text/javascript">
var page_size = {{page_obj.paginator.num_pages}};
</script>
<script type="text/javascript" src="{% static 'js/paginate.js' %}"></script>
</head>
js/paginate.js
$(document).ready( function() {
alert(page_size); //THIS WORKS!!!
});
但是,我不希望用户能够查看我的变量,因此我只是在“paginate.js”文件中添加了全局变量声明:
index.html
<head>
<script type="text/javascript" src="{% static 'js/paginate.js' %}"></script>
</head>
js/paginate.js
var page_size = {{page_obj.paginator.num_pages}}; //Exactly the same as the above!!
$(document).ready( function() {
alert(page_size); //ERROR!!!
});
奇怪的是,这给了我一个错误:
SyntaxError: invalid property id
var page_size = {{page_obj.paginator.num_pages}};
我不知道为什么第一个有效,而第二个却给我一个错误,因为它们完全相同......也许因为我第二个是在 Jquery 中声明......??有什么想法吗??
谢谢..
最佳答案
TL;DR
您无法将变量传递给静态文件,因为它们不会被 Django 模板处理器解析。
说明
您的第一个示例之所以有效,是因为您在模板中设置了 {{ page_obj.paginator.num_pages }}
,它将被解析并转换为数字。当您使用 Django 返回模板(通过任何 render
方法)时,只会渲染模板。模板中链接的 CSS 和 Javascript 称为静态文件:这意味着它们是 Django 模板处理器不会读取的资源。
假设您想要将变量插入页面的 img 中。这有什么意义吗?不?然而,这是相同的行为。
那该怎么做呢?
您可以通过 Javascript 文件中的 AJAX 请求获取数据(警告:对于您的情况来说有点过分),或者使用您的第一种方法。
相关主题:
关于javascript - 在 Jquery 中定义 Django 上下文变量给我错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18331811/