Django:动态生成JS是个好主意吗?

时间:2010-11-23 07:59:46

标签: javascript django assets

当我为Django项目编写JS文件时,我当然会做一些AJAX调用,而且目前这些调用的url是硬编码的(这非常难看)。

我在想django(而不是Apache)提供的JS文件,所以我可以利用模板标签({% url %} !!!)。

我不应该这样做吗?

或者有正确的方法吗?

(我可以给出至少一个:它会花费大量时间重新发送未更改的JS文件。最好的方法是让一个应用程序在重新启动django服务器时生成文件,然后静态地为它们提供服务! )

5 个答案:

答案 0 :(得分:11)

我会选择混合技术。静态服务你的大部分javascript。但是在你的Django模板中,有一个<script>块来定义由服务器端代码生成的各种全局变量 - url就是一个很好的例子。然后,您的静态JS可以引用动态代码中生成的变量。

答案 1 :(得分:6)

我从djangopackages深入搜索了这些资产管理器应用程序,发现django-mediagenerator提供了该功能,即使没有详细记录:您可以生成js或css文件作为django模板,然后静态地为它们服务(它们也是捆绑在一起的,并且管理缓存等等......所以两只一石二鸟+它很容易设置!)。

为了将JS文件生成为django模板(在设置django-mediagenerator之后),只需添加过滤器:

ROOT_MEDIA_FILTERS = {
    'js': 'mediagenerator.filters.template.Template',
}

在您的设置中。

答案 2 :(得分:4)

在您的服务器上动态生成Javascript可能是一个非常强大的工具,我在项目中遇到了它的上行和下行。

通常,您希望尽可能多地保持静态,以最大限度地减少每个请求要完成的工作。这包括尽可能地使用浏览器缓存,这可能会成为您的问题。

我通常做的是在我的基本模板的标题中有一个块。在需要执行仅在运行时已知的自定义javascript的模板中(例如,基于登录用户进行自定义),我将其添加到块中。在这里,我可以动态生成我知道不会被缓存的javascript,所以我可以做一些假设。缺点是更复杂。

如果你需要的只是指向网址,或者有一些简单的配置等,那么我建议创建一个视图,它将返回带有这些设置的Javascript文件。您可以设置正确的标头(Etag,Cache-Control等),以便浏览器将文件缓存一段合理的时间。升级代码时,请确保Etag将更改。

在需要使用配置的代码中,您需要始终检查您要查找的变量是否已实际定义,否则您遇到由于某种原因难以调试的问题配置javascript未正确加载。

答案 3 :(得分:0)

发送到浏览器的.js会有所不同。这可能会使调试变得更加麻烦。也许不是问题,但可能会考虑......

答案 4 :(得分:0)

如今,最好的方法是使用Django.js

以下是他们讨论网址转换的文档:http://djangojs.readthedocs.org/en/0.8.1/djangojs.html#reverse-urls