9

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

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

我有理由不这样做吗?

还是有正确的方法来做到这一点?

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

4

5 回答 5

12

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

于 2010-11-23T09:12:16.917 回答
7

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

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

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

在您的设置中。

于 2010-11-23T09:35:56.000 回答
4

在您的服务器上动态生成 Javascript 可能是一个非常强大的工具,我在我的项目中体验过它的优点和缺点。

一般来说,您希望尽可能地保持静态,以尽量减少对每个请求所做的工作。这包括尽可能多地缓存浏览器,这可能会成为您的问题。

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

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

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

于 2010-11-23T08:51:42.770 回答
0

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

这是他们谈论 URL 反转的文档:http: //djangojs.readthedocs.org/en/0.8.1/djangojs.html#reverse-urls

于 2013-12-05T13:37:07.327 回答
0

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

于 2010-11-23T08:06:06.657 回答