为啥用Django模板生成js代码会被鄙视

谢邀。本问题来源于我的回答 你所见过最恶心的代码片段是怎样的? - 余泽江的回答 。在上链中,展示了某友人在 Django 模版根据传入的 Python 变量动态拼接成 JavaScript 代码的方式。下面简要介绍一下为什么这样做不好。1. 静态文件的动态化静态文件(html,js,css,jpg,etc.)之所以称为静态文件,也就是由于其不变性。可以被缓存、通过 CDN 分发、通过 Nginx 直接读取文件系统等等。JavaScript 被动态化之后,不能被缓存、不能放 CDN、需要 Application Server 的复杂处理。不论从 CPU 还是 IO 上都会影响性能。2. 字符串拼接的危险性一切字符串拼接,包括但不仅限于 SQL、HTML 都会引来不必要的注入风险。对于 Markup 来说都需要经过严格转义和相关处理,对于 Logic Code,完全没得防。3. 现有工具的不可用因为嵌入到 Django 模版中,一切基于 JavaScript 的工具,包括但不仅限于 JSLint、Uglify、Browserify 等,除非自己写中间件。当然,能写中间件的人显然并不会这样写代码。4. 违反 Django 的 MTV 模式就算你要拼接字符串,模版也不是进行复杂运算的地方,要运算放 Python 代码里算好了传过来。5. 代码质量感人没有可读性和可维护性就不说了,可测试性也是基本没有的(当然还能写个端到端测试)。N. 附录并不是用源码生成源码就叫元编程。


    推荐阅读