首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jquery中定义Django上下文变量会给我带来错误?

在Jquery中定义Django上下文变量会给我带来错误?
EN

Stack Overflow用户
提问于 2013-08-20 09:42:00
回答 2查看 3.5K关注 0票数 0

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

首先,这是可行的:

index.html

代码语言:javascript
复制
<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

代码语言:javascript
复制
$(document).ready( function() {
    alert(page_size);                           //THIS WORKS!!!
});

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

index.html

代码语言:javascript
复制
<head>
    <script type="text/javascript" src="{% static 'js/paginate.js' %}"></script>
</head>

js/paginate.js

代码语言:javascript
复制
var page_size = {{page_obj.paginator.num_pages}};              //Exactly the same as the above!!

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

奇怪的是,这给了我一个错误:

代码语言:javascript
复制
SyntaxError: invalid property id
    var page_size = {{page_obj.paginator.num_pages}};

我不知道为什么第一个工作,第二个给我一个错误,因为他们是完全相同的.也许是因为我是第二个在Jquery中声明的人??知道吗??

谢谢..

EN

回答 2

Stack Overflow用户

发布于 2013-08-20 11:26:04

TL;DR

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

解释

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

假设要在页面中的img中插入变量。这说得通吗?不是吗?然而,这是同样的行为。

那怎么做呢?

您可以通过Javascript文件中的AJAX请求获得数据(警告:这里的情况有点过分),或者使用第一种方法。

相关专题:

票数 2
EN

Stack Overflow用户

发布于 2013-08-20 09:56:52

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

而在这里,所包含的Javascript不是由服务器上的Django模板处理器处理的,所以这是行不通的。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18331811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档