使用 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 有啥区别?