【问题标题】:Django - Template tags in javascript and css filesDjango - javascript 和 css 文件中的模板标签
【发布时间】:2011-04-02 19:18:37
【问题描述】:
有什么方法可以将模板标签添加到 javascript 和 css 文件中?我会将它用于任何事情,从传递 url 到媒体 url 链接(图像路径等)到基于用户权限的条件 javascript。
我只是想到也许我可以将它作为模板提供,但将 url 作为我的 javascript 文件。这是做这样的事情的唯一方法吗?如果是这样,它可能不适用于我的媒体生成器,所以如果有一个更好的解决方案,我可能想要一个更好的解决方案。
【问题讨论】:
标签:
javascript
css
django
django-templates
【解决方案1】:
如何从 在 Django HTML 模板中定义 JavaScript 变量和 CSS 属性,在 script 和 style 标记之间?我知道这听起来像是一种 hack,但在我看来它很整洁,因为这将允许您从一个位置控制您的动态变量。
【解决方案2】:
您的想法是正确的方法。如果您想利用 Django 的模板工具,那么最简单的方法是将 JS 文件作为模板提供。有关您的情况,请参阅 this question。
【解决方案3】:
您可以提供任何类型的内容,例如模板,而不必是 HTML。但是,您可能无法将其与其他静态内容一起提供,具体取决于您的设置。
如果您只想替换媒体 URL 之类的内容,一个选项是将这些模板“编译”成您可以提供的静态文件。但是,这不适用于基于当前用户权限的任何条件。每次部署或更改媒体 URL 等时,您都需要编写一个脚本来调用 django.template.loader.render_to_string 并将结果写入文件。
【解决方案4】:
至于 JS 文件中的动态内容,你必须像其他人所说的那样制作一个模板。
但是您可以使用django-sekizai 非常轻松地将 JS 和 CSS 文件附加到特定的页面模板。 (我将它用作 django-cms 的一部分,但它也可以独立工作。)
它允许您在一个普通的页面模板中,在一个块中定义模板所需的静态资源。 CSS 一个块,JS 一个块。然后可以将这些块打印在您的 base.html 中。它还处理重复文件,因此您不必担心多次添加相同的文件。请参阅usage document。
使用这个系统,你不会发送任何受限的 JS 或 CSS,因为 django 只会运行授权的模板,并且内容永远不会添加到 JS 和 CSS 块中。