从Django到JavaScript的全局变量
我想让我的 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
我会选择第一种方法。无论如何,你都应该使用一个基础模板,而使用上下文处理器可能是把变量放进去的最佳方式。