从django到javascript的全局变量

从django到javascript的全局变量,javascript,python,django,Javascript,Python,Django,我希望我的settings.py中的一些变量在我的项目中运行的每个javascript中都可用 实现这一目标最优雅的方式是什么 现在我可以想到两个: 编写一个上下文处理器,并在基本模板中声明这些全局变量。所有模板都必须扩展基础模板 在动态生成的.js文件中声明这些全局变量(通过某些视图),并在基本模板中使用标记加载此文件。所有模板都必须扩展基础模板 没有基本模板我能做吗?我不熟悉django,所以这可能是完全错误的 可以将变量写入页面上隐藏的HTML字段中吗。这将允许您从JavaScript

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

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

现在我可以想到两个:

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

  • 在动态生成的.js文件中声明这些全局变量(通过某些视图),并在基本模板中使用
    标记加载此文件。所有模板都必须扩展基础模板


没有基本模板我能做吗?

我不熟悉django,所以这可能是完全错误的


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

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

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

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

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

+1:非常简单,非常容易扩展。所有模板都必须扩展一个基础模板,所以这很有效。+1:同意。Django的模板系统足以充分发挥其潜力;)@DanielRoseman Javascript应该使用CSS选择器获取这些变量吗?是否存在任何安全问题?为什么没有基本模板?在HTML doctype和其他标准材料中使用标准基础模板有什么错?