【问题标题】:Django write from template to contextDjango从模板写入上下文
【发布时间】:2016-06-02 19:34:50
【问题描述】:

我有从页面获取 scrollHeight 的 javascript。

<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 数字从模板写入上下文?

【问题讨论】:

  • 你的意思是在同一个页面请求期间?
  • 是的。这样在我的模板标签中,我可以通过 scrollHeight 计算页码。

标签: javascript python django django-templates


【解决方案1】:

在 Django 模板和浏览器内 JavaScript 之间有一个重要的区别,您似乎忽略了这一点:

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

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

在浏览器中运行的 JavaScript 意味着模板已经在服务器上评估并发送到浏览器。此时设置模板上下文为时已晚。火车已经出站了。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 但就我而言,我需要反向。那么也许我可以从 javascript 写入请求或上下文?有可能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2011-01-15
    • 2011-04-12
    • 1970-01-01
    • 2011-01-07
    • 2012-04-08
    • 2012-04-14
    相关资源
    最近更新 更多