使用 Django 进行 Javascript 模板化

Posted

技术标签:

【中文标题】使用 Django 进行 Javascript 模板化【英文标题】:Javascript Templating with Django 【发布时间】:2011-09-25 12:42:26 【问题描述】:

我真的很想将 javascript 模板系统与 Django 一起使用。 Mustache.js(及其衍生产品)的语法和风格非常适合我。问题是 Mustache 使用的分隔符标签不能很好地与 Django 模板系统的语法配合使用。

有什么好的方法可以一起使用吗?

我尝试过使用this verbatim snippet 来正确渲染JS 模板。该解决方案的问题是我有时仍然需要 JS 中的 Django 变量或 URL。

我也尝试过使用更改 Mustache 的分隔符

=[[ ]]=

但是,这不允许使用部分标签,例如 #。作者表示他打算在未来的版本中完全删除该功能。

是否有任何 JavaScript 模板库紧跟 Mustache.js,但使用不同的分隔符?或者是否有其他解决方案可以更改 Mustache.js 使用的分隔符?

【问题讨论】:

【参考方案1】:

我在 django 中使用了 jquery 的模板。最终我决定最好的方法是:

将所有 javascript 放入静态 javascript 文件中,无需任何服务器端处理即可提供它们 在 django 模板中提供所有 html 钩子(id 或类),但没有 js。 在 js 中使用 'document.ready' 加上 jquery 选择器将标签插入页面并附加事件 如果 js 需要数据然后进行 ajax 调用。

我对最后一个软化了,可能会将数据作为 json 块嵌入到 django 模板中,并且可能在模板底部还有一个简短的 js,它只是设置变量/参数来指示 js 如何呈现页面 - 来自服务器端的小线索告诉它该做什么。

因此:

    转义字符之间的争用不再是问题 您不必一直问自己“此代码是在服务器上运行还是在客户端上运行”,因为您不会尝试将两者同时写入一个文件中 您的 javascript 代码必须具有更好的结构和可重用性

【讨论】:

【参考方案2】:

看起来change Mustache's delimiters 非常容易,尽管我认为应该支持可配置的分隔符。

如果您不能接受,还有很多其他模板库,例如 jquery-tmpl 和 underscore.template。

【讨论】:

【参考方案3】:

EJS 是一个非常不错的模板系统。它使用<% %> 标签。

编辑:More templating libs

【讨论】:

EJS 似乎在对我做事。不过,我会仔细看看。感谢 microjs.com 上的提示!

以上是关于使用 Django 进行 Javascript 模板化的主要内容,如果未能解决你的问题,请参考以下文章

从 Javascript 到 Django 服务器进行查询

如何在 JavaScript 中使用模运算符 (%)? [复制]

django 在建模时的一个手贱

通过(ajax/javascript)发布到 django 视图打印空查询集

Django - 跨关系查询

如何在 django 中使用 Javascript 获取跨域数据?