【问题标题】:global variable from django to javascript从 django 到 javascript 的全局变量
【发布时间】:2010-02-05 09:57:50
【问题描述】:

我希望我的 settings.py 中的一些 变量在我的项目中运行的每个 javascript 中都可用。

实现这一目标最优雅的方式是什么?

现在我能想到两个:

  • 编写上下文处理器并在基本模板中声明这些全局变量。所有模板都必须扩展基本模板。

  • 在动态生成的 .js 文件中声明这些全局变量(根据某些观点),并在基本模板中使用 <script> 标记加载此文件。所有模板都必须扩展基本模板。

没有基础模板可以吗?

【问题讨论】:

  • 为什么没有基本模板?使用 HTML 文档类型和其他标准材料使用标准基本模板有什么问题?

标签: javascript python django


【解决方案1】:

我会使用选项 1。在任何情况下,您都应该使用基本模板,而上下文处理器可能是将变量放入其中的最佳方式。

【讨论】:

  • +1:非常简单,非常容易扩展。无论如何,所有模板必须扩展基本模板,所以效果很好。
  • +1:同意。 Django 的模板系统足以发挥其全部潜力;)
  • @DanielRoseman Javascript 是否应该使用 CSS 选择器获取这些变量?是否存在任何安全/安保问题?
【解决方案2】:

我不熟悉 django,所以这可能完全不正确。

你能把变量写到页面上隐藏的 HTML 字段中吗?这将允许您从 JavaScript 访问它们,或者在您需要时在表单帖子中使用它们。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,我正在使用带有“稍后重构”注释的丑陋解决方案。
    我在基本模板的顶部放置了一个 js_top 块,然后任何需要额外包含或 js 变量集的模板都可以使用该块。
    所以我有这样的东西:

    {% block js_top %}
        <script src="/jquery.useless-plugin.js" type="textjavascript"></script>
        <script type="textjavascript">
            var myVar = {{my_variable.propriety}};
        </script>
    {% endblock %}
    

    当然,如果您需要更健壮且更少“一次性”的系统,我会选择生成的 js。

    【讨论】:

      猜你喜欢
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      相关资源
      最近更新 更多