使用 django 将 STATIC_URL 传递给文件 javascript

Posted

技术标签:

【中文标题】使用 django 将 STATIC_URL 传递给文件 javascript【英文标题】:Passing STATIC_URL to file javascript with django 【发布时间】:2012-03-23 12:24:10 【问题描述】:

将 STATIC_URL 传递给 javascript 文件的最佳解决方案是什么?

我正在使用 django 和 python。

提前致谢。 问候。

【问题讨论】:

您是说将javascript文件加载到模板中吗?或者您的意思是在 javascript 文件中使用 STATIC_URL 的值? 【参考方案1】:

使用带有静态 url 值的全局 javascript 变量更简单:

<script language="javascript">var STATIC_URL = " STATIC_URL|escapejs ";</script>
<script src=" STATIC_URL js/myfile.js"></script>

然后,您可以通过在 myfile.js 中调用 STATIC_URL 来简单地使用静态 url:

html = '<img src="'+STATIC_URL+'/icons/flags/tn.gif">';

【讨论】:

我喜欢这个解决方案!【参考方案2】:

django-compressor 让您可以做到这一点,并通过将所有需要的 JS 或 CSS 压缩到一个文件中并优化文件大小来优化您的网站。

更新: 默认情况下,压缩器将使用STATIC_URL 将相对网址转换为绝对网址。如果你下载开发版,它会附带一个 django 模板引擎解析器,它可以让你直接在 CSS 文件中使用所有 django 模板代码,例如 % static % 标签。

https://github.com/jezdez/django_compressor

安装后在settings.py中启用TemplateFilter,通过模板引擎解析你的js或css文件。

COMPRESS_JS_FILTERS = [
    'compressor.filters.template.TemplateFilter',
]

现在% compress js % 块中的任何 JS 都将被 django 模板语言解析...

% compress js %
    <script src="/my_script.js" type="text/javascript"></script>
% endcompress %

// my_script.js
alert(' STATIC_URL|escapejs ');

您要求最好的方法——我认为这是最好的。当然比提供动态文件更好。

【讨论】:

这是一个很棒的建议! django-compressor 是一个很酷的项目。 @slypete,是的,太棒了!优化文件数量、文件大小,甚至添加模板变量。杰出的。这是我最新的巨大 django 游戏改变者.. 下一步是什么!? 我真的很喜欢这个工具 - 一个注意事项是使用“pip install django_compressor”安装它,而不是从 github 克隆它 - 设置时间不到 10 分钟。我唯一遇到的问题是在我的 settings.py 中显式设置“COMPRESS_ENABLED = True”...就好像您已经从其他应用程序中获得了 DEBUG = True,它会读取它而不是实际压缩。 我已经设置了所有选项,并且文件被连接和压缩。问题是,只要我添加 COMPRESS_JS_FILTERS 以使此代码在 JS 文件中工作: STATIC_URL|escapejs 然后文件被连接,但不再压缩。我错过了什么?【参考方案3】:

我认为这补充了@Yuji 'Tomita' Tomita 的评论,作为一个完整的设置。

这对我有用。

这就是我在 django js 文件中使用 STATIC_URL 完成 django 压缩器的完整设置。

https://github.com/jezdez/django_compressor

pip install django_compressor

将“压缩器”添加到您的 INSTALLED_APPS 设置中:

INSTALLED_APPS = (
    # other apps
    "compressor",
)

在 Debug 模式下测试压缩,在 settings.py 中:

COMPRESS_ENABLED = True

如果您使用 Django 的 staticfiles contrib 应用程序(或其独立对应的 django-staticfiles),您必须将 Django Compressor 的文件查找器添加到 STATICFILES_FINDERS 设置中,例如使用 django.contrib.staticfiles:

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    # other finders..
    'compressor.finders.CompressorFinder',
)

安装后在settings.py中启用TemplateFilter,通过模板引擎解析你的js或css文件。

COMPRESS_JS_FILTERS = [
    'compressor.filters.template.TemplateFilter',
]

现在 % compress js % 块中的任何 JS 都将被 django 模板语言解析...

% load compress %

% compress js %
    <script src="/my_script.js" type="text/javascript"></script>
% endcompress %

// my_script.js

alert(' STATIC_URL|escapejs ');

【讨论】:

我正在阅读文档,但我没有在那里找到这个“STATICFILES_FINDERS”设置。在我阅读您的评论并添加后,我的应用程序开始工作。谢谢!

以上是关于使用 django 将 STATIC_URL 传递给文件 javascript的主要内容,如果未能解决你的问题,请参考以下文章

如何使 STATIC_URL 在外部 JS 文件(Django)中工作

如何在 Django 中使用 static_url 制作自定义图像路径?

django STATIC_URL STATIC_ROOT STATICFILES_DIRS的区别

Django 中的 STATIC_URL 和 STATIC_ROOT 有啥区别?

如何在 Django settings.py 中为 CDN 设置 STATIC_URL

为啥更改我的“STATIC_URL”设置会改变我的 Django 应用程序是不是正常工作?