我试图在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中声明的人??知道吗??
谢谢..
发布于 2013-08-20 11:26:04
TL;DR
您不能将变量传递给静态文件,因为它们不是Django模板处理器解析的。
解释
第一个示例之所以有效,是因为您在模板中设置了{{ page_obj.paginator.num_pages }},该模板将被解析并转换为一个数字。当您使用Django返回模板时(通过任何render方法),将只呈现该模板。链接在模板中的CSS和Javascript被称为静态文件:这意味着它们是重源,不会被Django模板处理器读取。
假设要在页面中的img中插入变量。这说得通吗?不是吗?然而,这是同样的行为。
那怎么做呢?
您可以通过Javascript文件中的AJAX请求获得数据(警告:这里的情况有点过分),或者使用第一种方法。
相关专题:
发布于 2013-08-20 09:56:52
在Django中,如果需要将变量从视图传递到JS/html文件,则必须确保django模板引擎解析该文件。换句话说,该文件必须由Django提供。
而在这里,所包含的Javascript不是由服务器上的Django模板处理器处理的,所以这是行不通的。
如果您需要传递要在JS文件中使用的模板变量,那么您必须使用问题中提到的第一个方法,即创建一个小的<script>块,其中声明了一些全局变量以包含这些模板变量。然后,任何JS文件都可以通过查找全局js变量来获取值。
https://stackoverflow.com/questions/18331811
复制相似问题