使用Django模板系统提供CSS和JavaScript有什么优缺点

时间:2011-08-24 18:42:16

标签: django django-templates

通常情况下,我会遇到一些情况,我认为在CSS和JavaScript文件中使用模板标签是有意义的,例如在CSS中使用{{STATIC_URL}}来访问图像。我知道实现这一目标的唯一方法是让Django提供CSS和JavaScript文件。我对这种方法很感兴趣。但在我承诺之前,我想听听专家的经验。这种方法的优点和缺点是什么? THX。

2 个答案:

答案 0 :(得分:2)

优点:

  • 您可以针对事物的外观和行为做出很多按要求做出的决定。
  • 您可以将不同CSS / JS文件的数量保持在最低限度。

缺点:

  • 浏览器倾向于积极地缓存CSS和JS,因此您需要使用一些积极的反缓存技术。当然,这意味着禁用某些/所有静态文件的缓存。
  • 每个CSS和JS请求都将使用WSGI服务器的另一个线程。在正常的请求/响应周期中,每个请求通常占用一个线程;至少你有效三倍,所以现在你的应用程序可以处理200个同步请求现在只能处理66个。
  • 当您的网站变大时,CDN可能无法帮助您。

备选方案:

  • 通过javascript调整CSS,并在页面模板中设置一个javascript变量来控制调整。
  • 使用多个CSS文件并动态控制其包含。
  • 根据需要生成静态文件,然后将它们缓存到磁盘并通过mod_xsendfile提供它们。这仅适用于从django进程可以写入的某个位置提供静态文件的情况,例如在同一台计算机或网络装载上。

答案 1 :(得分:0)

就个人而言,我一直坚持使用Django团队的建议来制作CSS和JavaScript静态文件,由服务器直接提供,而不是通过Django提供。它不是一个问题,并简化了很多东西。一般来说,任何时候我认为我需要一个动态的CSS或JS文件,有一种方法可以重构,所以我没有。

例如:

  

在CSS中使用{{STATIC_URL}}来访问图像

我不确定{{ STATIC_URL }}的变量有多大,但我发现在我的网页中使用<base>标记可以解决很多问题。我假设这是背景图片?你能更新你的问题来举例吗?

我做的另一件事是,如果我的JavaScript需要动态数据,我会将大部分代码放在JavaScript库中作为静态文件,然后将最小的动态内容放在<script>中标签在页面的末尾。通常我会将它全部放在一个对象中(看起来很像JSON),然后将该对象传递给一个函数。想想看,你可以把所有动态的东西,在你的视图函数中用它来制作一个字典,把它编码成JSON,然后通过上下文传递它。然后您的页面模板看起来像:

<html><head>
...
<script src="{{ STATIC_URL }}/js/foo.js"></script>
...
</head><body>
...
<script>
    foo_main({{ foo_params_json|safe }});
</script>
</body></html>

这使得 lot 更容易重用此代码。