Django 我的LESS@import路径应该是什么?

Django 我的LESS@import路径应该是什么?,django,less,django-compressor,Django,Less,Django Compressor,以下是场景: 我正在运行Django 1.3.1,利用staticfiles和Django compressor(最新稳定版)编译更少的文件 我有一个“资产”目录,它与带有staticfiles\u DIRS(用于项目范围的静态资源)的staticfiles挂钩。在那个目录中,我有一个“css”目录,在那个目录中有一个“lib.less”文件,其中包含的变量和mixin更少 因此,物理路径是/assets/css/lib.less,服务于/static/css/lib.less 在我的一个应用程

以下是场景:

我正在运行Django 1.3.1,利用staticfiles和Django compressor(最新稳定版)编译更少的文件

我有一个“资产”目录,它与带有
staticfiles\u DIRS
(用于项目范围的静态资源)的staticfiles挂钩。在那个目录中,我有一个“css”目录,在那个目录中有一个“lib.less”文件,其中包含的变量和mixin更少

因此,物理路径是
/assets/css/lib.less
,服务于
/static/css/lib.less

在我的一个应用程序的静态目录中,我有另一个更少的文件需要导入上面的文件。它的物理路径是
/myapp/static/myapp/css/file.less
,它将在
/static/myapp/css/file.less提供服务

我的第一个想法是:

@import "../../css/lib.less"
(即,基于URL,从
/static/myapp/css
上升到
/static/
,然后向下遍历到
/static/css/lib.less

但是,这不起作用,我尝试了我能想到的URL和物理路径的几乎所有组合,所有这些组合都在模板中提供了
filteerror
s,这是因为无法找到要导入的文件


任何人都知道实际的导入路径应该是什么吗?

在精确跟踪django压缩程序源中的错误来源之后。事实证明,它是直接从外壳传递过来的。这迫使我删除了所有的变量,并试图让
lessc
编译器解析文件

事实证明,它需要从源文件到要导入的文件的相对路径,即物理文件系统路径。所以我不得不回到我的
,然后从那里引用
资产/css/lib.less
。最终有效的实际导入是:

@import "../../../../assets/css/lib.less"
但非常奇怪的是,LESC不接受绝对文件系统路径(即
/path/to/project/assets/css/lib.less
)。我不知道为什么

更新(2012年8月2日)

当我最终将代码推送到我的登台环境并运行
collectstatic
时,我有一个彻底的“DUH”时刻。我使用的@import路径在开发中工作得很好,因为当时它是文件的物理路径,但是一旦
collectstatic
完成了它的工作,所有东西都会相对于
/static/
移动

我曾想过使用符号链接来匹配collectstatic前后的导入路径,但我认为从长远来看,这太复杂和脆弱了


所以。。。我将所有较少的文件分解并移动到
/assets/css/
下,并合理地将较少的文件移出应用程序,因为它们与项目级文件绑定,以便正常工作,它们本身就是项目级的。

我也有同样的想法,这就是我为compressor和LESC的最新版本与StaticFile集成而提出的。希望这能帮助其他人

从实验中我可以看出,
lessc
没有绝对或相对路径的概念。相反,它似乎维护了一个搜索路径,其中包括当前目录、less文件的包含目录,以及通过
--include path
传递给它的任何内容

所以在我的压缩机配置中,我把

COMPRESS_PRECOMPILERS = (
    ('text/less', 'lessc --include-path=%s {infile} {outfile}' % STATIC_ROOT),
)
比如说,在运行了
collectstatic
之后,我的bootstrap生活在

STATIC_ROOT/bootstrap/3.2.0/bootstrap.css. 
然后从任何更少的文件,我现在可以写

@import (less, reference) "/bootstrap/3.2.0/bootstrap.css"
这使我能够在任何less文件中使用引导类作为less混入

每次更新更少的文件时,我都必须运行collectstatic将它们聚合到本地目录中,以便compressor可以为
less
提供正确的源文件。否则,压缩机处理一切顺利。您还可以使用
collectstatic-l
来进行符号链接,这意味着您只需要在添加新文件时收集文件

我正在考虑实现一个管理命令来简化开发过程,即在每次重新加载服务器时,子类
runserver
调用
collectstatic
,或者在更新时直接使用
django.utils.autoreload
调用
collectstatic


编辑(2014/12/01):如上所述,我的方法需要一个本地静态根。我在生产环境中使用带脱机压缩的远程存储,因此部署需要额外的几个步骤。除了调用
collectstatic
将静态文件同步到远程存储之外,我还使用使用本地存储的不同django配置文件调用
collectstatic
。在本地收集文件后,我可以调用“compress”,将其配置为将结果文件上载到远程存储,但在本地存储中查找源文件。

Blah!我想我也得这么做。。。我的本地开发人员编译器不知道django的静态文件。。因此,即使我修改了工作流以在本地运行collectstatic,我的编译器也会修改/static/dir中的文件。。有点不幸。除了CSS之外,你还使用静态文件吗?我最终将我的less文件移动到
资产/less/products.less,并删除了应用程序文件夹结构。一个拥有所有资产的应用程序感觉如此干净,真可惜它已经消失了!也许我遗漏了一些东西,但为什么不配置一些include路径来实现它,这样就不必使用那些相对路径呢?它可能不是理想的名称空间或名称空间,但也不是您的解决方案。