从Django到JavaScript的全局变量

5 投票
3 回答
2312 浏览
提问于 2025-04-15 18:55

我想让我的 settings.py 文件中的一些变量 在项目中的每一个 JavaScript 文件 中都能使用。

有什么优雅的方法可以做到这一点吗?

现在我想到两种方法:

  • 写一个上下文处理器,然后在一个基础模板中声明这些全局变量。所有的模板都必须继承这个基础模板。

  • 在一个动态生成的 .js 文件中声明这些全局变量(通过某个视图),然后在基础模板中使用 <script> 标签加载这个文件。所有的模板也必须继承这个基础模板。

我可以不使用基础模板来做到这一点吗?

3 个回答

0

我也遇到了同样的问题,现在用了一种不太好的解决办法,并且给自己留了个“以后再重构”的备注。
我在我的基础模板的顶部放了一个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。

1

我对django不太熟悉,所以可能说的不太对。

你可以把变量写到页面上的隐藏HTML字段里。这样的话,你就可以通过JavaScript来访问这些变量,或者在需要的时候在表单提交中使用它们。

6

我会选择第一种方法。无论如何,你都应该使用一个基础模板,而使用上下文处理器可能是把变量放进去的最佳方式。

撰写回答