0

我正在尝试在我的 jquery 脚本中使用 django 上下文变量。

首先,这个作品:

索引.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/分页.js

$(document).ready( function() {
    alert(page_size);                           //THIS WORKS!!!
});



但是,我不希望用户能够查看我的变量,所以我只是在“paginate.js”文件中添加了全局变量声明:

索引.html

<head>
    <script type="text/javascript" src="{% static 'js/paginate.js' %}"></script>
</head>

js/分页.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 中声明..??任何想法??

谢谢..

4

2 回答 2

2

TL;博士

您不能将变量传递给静态文件,因为 Django 模板处理器不会解析它们。

解释

您的第一个示例有效,因为您{{ page_obj.paginator.num_pages }}在模板中设置了 ,该模板将被解析并转换为数字。当您使用 Django(通过任何render方法)返回模板时,只会呈现模板。模板中链接的 CSS 和 Javascript 称为静态文件:这意味着它们是 Django 模板处理器不会读取的资源。

想象一下,您想在页面的 img 中插入变量。这有什么意义吗?不?但是,这是相同的行为。

那该怎么做呢?

您可以通过 Javascript 文件中的 AJAX 请求获取数据(警告:对于您的情况来说有点矫枉过正),或者使用您的第一种方法。

相关主题:

于 2013-08-20T11:26:04.973 回答
0

在 Django 中,如果我们需要将变量从视图传递到 JS/html 文件,我们必须确保该文件被 django 模板引擎解析。换句话说,文件必须由 Django 提供。

而在这里,包含的 Javascript 不由服务器上的 Django 模板处理器处理,所以这不起作用。

如果您需要传递要在 JS 文件中使用的模板变量,那么您必须使用问题中提到的第一种方法,即创建一个小块<script>,其中声明了一些全局变量以包含这些模板变量。然后,任何 JS 文件都可以通过查找全局 js 变量来获取值。

于 2013-08-20T09:56:52.647 回答