Chr*_*att 9 django less django-compressor
这是场景:
我正在运行Django 1.3.1,使用静态文件和django-compressor(最新稳定版)来编译LESS文件.
我有一个"资产"目录,它挂在静态文件中STATICFILES_DIRS
(对于项目范围的静态资源).在那个目录中,我有一个"css"目录,其中包含一个包含LESS变量和mixins的"lib.less"文件.
所以物理路径是<project_root>/assets/css/lib.less
,它服务于/static/css/lib.less
.
在我的一个应用程序的静态目录中,我有另一个LESS文件,需要导入上面的那个.它的物理路径是<project_root>/myapp/static/myapp/css/file.less
,它将服务于/static/myapp/css/file.less
.
我的第一个想法是:
@import "../../css/lib.less"
Run Code Online (Sandbox Code Playgroud)
(即,基于URL,从上升到水平/static/myapp/css
来/static/
,然后遍历下入/static/css/lib.less
).
但是,这不起作用,我已经尝试了几乎我能想到的URL和物理路径的所有组合,并且所有这些组合都FilterError
在模板中给我,因为无法找到要导入的文件.
任何人都有任何想法,实际的导入路径应该是什么?
Chr*_*att 11
在精确跟踪django压缩器源中错误的来源之后.事实证明,它直接从shell传递.这让我想要删除所有变量,并且只是试图让lessc
编译器解析文件.
原来它想要从物理文件系统路径导入从源文件到文件的相对路径.所以我不得不一直回到我的身边<project_root>
然后assets/css/lib.less
从那里引用.最终工作的实际导入是:
@import "../../../../assets/css/lib.less"
Run Code Online (Sandbox Code Playgroud)
但奇怪的是,lessc 不接受绝对文件系统路径(即/path/to/project/assets/css/lib.less
).我不知道为什么.
更新(02/08/2012)
当我最终将我的代码推送到我的临时环境并运行时,有一个完整的"DUH"时刻collectstatic
.我用的是@import路径发展工作得很好,因为这是该文件的物理路径,然后,但一旦collectstatic
做它的事,一切都围绕移动和相对<project_root>/static/
.
我玩弄了使用符号链接来尝试匹配collectstatic
@import 前后路径的想法,但我认为从长远来看,这太复杂和脆弱了.
所以...我崩溃并将所有LESS文件移到一起<project_root>/assets/css/
,并合理化将LESS文件移出应用程序,因为因为它们与项目级文件绑定以便运行,所以它们本身就是项目级别的他们自己.
我也处于同样的困境,这就是我为最新版本的压缩器和 lessc 与静态文件集成而提出的想法。希望这能帮助其他人
据我从实验中可以看出,lessc
没有绝对或相对路径的概念。相反,它似乎维护一个搜索路径,其中包括当前目录、less 文件的包含目录以及通过以下方式传递给它的任何内容--include-path
所以在我的压缩机配置中我把
COMPRESS_PRECOMPILERS = (
('text/less', 'lessc --include-path=%s {infile} {outfile}' % STATIC_ROOT),
)
Run Code Online (Sandbox Code Playgroud)
比如说,跑步后collectstatic
我有引导生活在
STATIC_ROOT/bootstrap/3.2.0/bootstrap.css.
Run Code Online (Sandbox Code Playgroud)
然后从任何 less 文件中,我现在可以写
@import (less, reference) "/bootstrap/3.2.0/bootstrap.css"
Run Code Online (Sandbox Code Playgroud)
这允许我在我的任何 less 文件中使用引导类作为 less mixin!
每次更新 less 文件时,我都必须运行collectstatic 将它们聚合到本地目录中,以便压缩器可以提供less
正确的源文件来处理。否则,压缩机会顺利处理一切。您还可以使用collectstatic -l
符号链接,这意味着您只需要在添加新文件时收集文件。
我正在考虑实现一个管理命令来平滑开发过程,无论是每次重新加载服务器时调用子类,还是runserver
在更新内容时直接使用调用。collectstatic
django.utils.autoreload
collectstatic
编辑(2014/12/01):我上面概述的方法需要本地静态根。我在生产环境中使用远程存储和离线压缩,因此部署需要几个额外的步骤。除了调用collectstatic
将静态文件同步到远程存储之外,我还调用collectstatic
使用本地存储的不同 django 配置文件。在本地收集文件后,我可以调用“压缩”,将其配置为将结果文件上传到远程存储,但在本地存储中查找源文件。
归档时间: |
|
查看次数: |
5892 次 |
最近记录: |