我经常遇到这样的情景,我认为在CSS和JavaScript文件中使用模板标记是有意义的,例如在{{STATIC_URL}}中使用{{STATIC_URL}} CSS来访问图像。我明白实现这一目标的唯一方法是让Django提供CSS和JavaScript文件。我对这种方法感兴趣。但在我提交之前,我想听听专家的经验。这种方法有哪些优缺点?谢谢。使用Django模板系统服务CSS和JavaScript有哪些优缺点
3
A
回答
2
优点:
- 你可以做一个事情的外观和行为很多每个请求的决定。
- 您可以将不同的CSS/JS文件的数量降到最低。
缺点:
- 浏览器往往缓存CSS和JS积极,所以你需要使用一些激进的反缓存技术。当然,这意味着禁用某些/所有静态文件的缓存。
- 每个CSS和JS请求都会消耗WSGI服务器的另一个线程。在正常的请求/响应周期中,每个请求通常占用一个线程;至少,现在你的应用程序可以同时处理200个并发请求,现在只能处理66个。
- 当你的网站变得很大时,CDN可能无法帮到你。
替代方案:
- 通过javascript扭捏的CSS,并设置你的页面模板中JavaScript变量来控制调整。
- 使用多个CSS文件并动态控制它们的包含。
- 根据需要生成静态文件,然后将其缓存到磁盘并通过mod_xsendfile提供。这只适用于从django进程可以写入的地方提供静态文件,例如在同一台机器上或网络安装上。
+0
感谢您的明确和有用的分析。 – tamakisquare
0
就个人而言,我一直坚持使用Django团队的建议来制作CSS和JavaScript静态文件,由服务器而不是通过Django直接提供。这不是一个问题,简化了很多东西。一般来说,任何时候我想我需要一个dynamioc 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>
这使得它成为很多更易于重复使用此代码。
相关问题
- 1. 用于Node.js模板的Jade和EJS有哪些优缺点?
- 2. 使用SQLDataReader有哪些优点/缺点?
- 3. 使用GAC有哪些优缺点?
- 4. 使用boost :: iterator_facade有哪些优缺点?
- 5. 属性模式有哪些优缺点?
- 6. 使用主要.NET开发机器的服务器操作系统有哪些优点/缺点?
- 7. Solr和ElasticSearch有哪些优缺点?
- 8. 用户模式和内核模式的优点和缺点有哪些
- 9. 企业库的Msmqdistributor服务有哪些优缺点?
- 10. DevExpress Reports有哪些优点/缺点?
- 11. 用于Django/Python的CSS模板系统?
- 12. 使用Phonegap和Titanium有哪些优缺点?
- 13. 使用MSI和MSP有哪些优缺点?
- 14. RDB2RDF工具有哪些优缺点?
- 15. 使用数据服务层有什么优点和缺点?
- 16. 在纯Java环境中,Web服务和RMI有哪些优缺点?
- 17. 使用这个极简主义系统的优点和缺点?
- 18. 在页面对象上使用剧本模式有哪些优点/缺点?
- 19. 认知服务OCR优点和缺点
- 20. C#中的类型推断有哪些优点和缺点?
- 21. 优势和智者模板的缺点
- 22. JavaScript模板系统
- 23. 在硒中使用“xpath”有哪些优缺点?
- 24. 使用.Net开发Facebook Apps有哪些优缺点?
- 25. 使用dbml进行linq2sql查询有哪些优缺点?
- 26. 记录到系统日志和文件系统:优点和缺点
- 27. 在SQL服务器查询中关闭NOCOUNT有哪些优缺点?
- 28. NServiceBus:使用NServiceBus分发服务器的优点和缺点
- 29. 经纪和非经纪消息系统的优点和缺点
- 30. IF在Django模板系统
那么你将有观点的逻辑和模板编译等的开销,但我猜想,应该不会有太大的小数量的文件,并使用Django的缓存系统的问题。但我宁愿使用某种JavaScript编译器([关闭](http://code.google.com/closure/)为例),也许[SASS]的(http://sass-lang.com/)或CSS的一些东西,并用一些轻量级的Web服务器来提供它们您也可以使用CSS图像的相对路径,因此您并不需要{{STATIC_URL}}。 –
我对这个问题的答案也很感兴趣。我以前用过的动态生成的JS/CSS Django的,感觉很脏,哈克,但与此同时,它使开发和部署更容易。对CSS的图像相对路径和django.contrib.staticfiles应用 – sesh
之间,你不应该需要使用Django的模板引擎只是为了解决路径问题。如果你有每个请求的动态CSS生成,你正在设置自己的缓存地狱。 – GDorn