Django从模板写入上下文

时间:2016-02-21 11:39:26

标签: javascript python django django-templates

我有javascript从页面获取scrollHeight。

<script type="text/javascript">

       var body = document.body,
       html = document.documentElement;

       var height = Math.max( body.scrollHeight, body.offsetHeight, 
                                   html.clientHeight, html.scrollHeight, html.offsetHeight );
       document.write(height);
</script>  

在我的情况下,我需要在模板标签中获得此高度。是否可以将此scrollHeight编号从模板写入上下文?

2 个答案:

答案 0 :(得分:1)

您似乎缺少Django模板和浏览器内JavaScript之间的重要区别:

Django在服务器端执行,而JavaScript则在客户端执行。

这意味着(在单个请求中)Django模板总是在 JavaScript之前执行(因为它是由服务器在页面发送到客户端之前执行的)。因此,绝对不可能以你想要的方式混合JavaScript和Django代码。

在浏览器中运行的JavaScript意味着模板已经在服务器上进行了评估并发送到浏览器。在这一点上设置模板上下文只是为时已晚。火车已离开车站。

你需要接受这种方法是不可能的,并找到另一种方法来实现你的目标。我不会就此向您提供建议,因为我没有关于您正在处理的功能的任何具体信息。在这一点上,我可以推测。您很可能应该从服务器发送一个通用的高度独立版本的站点,然后使用JavaScript来应用特定height值产生的更改。或者可能只是重写你的(CSS?)代码,因此不再需要这个值 - 如果你的情况甚至可以这样做。

答案 1 :(得分:0)

因为 - 在同一个请求中 - 第一个django模板代码在服务器上运行而之后 js代码在浏览器中运行,您可以在js代码中轻松使用django模板上下文值但是不相反。您可以通过AJAX将js值发送​​到服务器。但这是在第二次 - 虽然是异步 - 请求。