我正在使用 Django-Compressor Filter 作为 Wagtail(具有超酷 UI 的 Django 变体 CMS)的一部分。环境是 Wagtail 0.2 + Python 2.7 + Django 1.6 + Virtualenv + FastCGI + Apache 共享主机。
尝试访问 CMS 的管理/登录页面时出现问题。 Django 显示错误渲染模板
Error during template rendering
In template /home/username/env/lib/python2.7/site-packages/wagtail/wagtailadmin/templates/wagtailadmin/skeleton.html, error at line 20
/bin/sh: django_libsass.SassCompiler: command not found
skeleton.html 的第 20 行是:
<!doctype html>
{% load compress %}
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="{{ LANGUAGE_CODE|default:"en-gb" }}"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8" lang="{{ LANGUAGE_CODE|default:"en-gb" }}"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9" lang="{{ LANGUAGE_CODE|default:"en-gb" }}"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="{{ LANGUAGE_CODE|default:"en-gb" }}"> <!--<![endif]-->
<title>Wagtail - {% block titletag %}{% endblock %}</title>
<meta name="description" content="" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
{% block css %}{# Block defined for timing breakdowns in django debug toolbar - not expected to be overridden #}
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700" />
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Bitter:400,700" />
19
20 {% compress css %}
21 <link rel="stylesheet" href="{{ STATIC_URL }}wagtailadmin/scss/normalize.css" />
<link rel="stylesheet" href="{{ STATIC_URL }}wagtailadmin/scss/vendor/jquery-ui/jquery-ui-1.10.3.verdant.css" />
<link rel="stylesheet" href="{{ STATIC_URL }}wagtailadmin/scss/vendor/jquery.timepicker.css" />
<link rel="stylesheet" href="{{ STATIC_URL }}wagtailadmin/scss/core.scss" type="text/x-scss" />
{% endcompress %}
{% block extra_css %}{% endblock %}
{% endblock %}
</head>
<body class="{% block bodyclass %}{% endblock %} {% if messages %}has-messages{% endif %}">
我的settings.py中的预编译器,DEBUG设置为True:
COMPRESS_ENABLED = True
COMPRESS_PRECOMPILERS = (
('text/x-scss', 'django_libsass.SassCompiler'),
)
尝试和错误#1
我试过改成:
('text/x-scss', '/home/username/env/lib/python2.7/site-packages/django_libsass {infile} {outfile}')
但这导致我出现字典更新序列元素 #0 错误。
我安装了 django_libsass 和压缩器,还尝试了 pip install libsass
、ngm install lessc
、pip install sass
、打开 DEBUG = False
,添加 COMPRESSOR_OFFLINE
,按照其他类似问题中的建议添加 COMPRESSOR_ENABLED
。运行 manage.py compress
返回相同的错误。
已重新检查,站点包和 django_libsass 确实在我的 sys.path 上
SassCompiler 可以在 ~/env/lib/python2.7/site-packages/django_libsass.py
中找到
尝试和错误#2
重新检查 sass
是否已安装并在我的路径上。
将代码更改为:
COMPRESS_PRECOMPILERS = (
('text/x-scss', 'sass --scss {infile} {outfile}'),
)
返回错误:
Exception Type: FilterError
Exception Value:
/bin/sh: sass: command not found
尝试和错误 #3
看完这篇feedly issue , 试过 pip install compass
没有效果
尝试和错误 #4
根据 gasman 的评论,我运行了 python manage.py shell 并尝试导入 SassCompiler 它没有错误。
Python 2.7.6 (default, Nov 11 2013, 18:34:29)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django_libsass import SassCompiler
>>>
完整追溯
如果这个问题太长,我深表歉意。
Traceback:
File "/home/username/env/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
139. response = response.render()
File "/home/username/env/lib/python2.7/site-packages/django/template/response.py" in render
105. self.content = self.rendered_content
File "/home/username/env/lib/python2.7/site-packages/django/template/response.py" in rendered_content
82. content = template.render(context)
File "/home/username/env/lib/python2.7/site-packages/django/template/base.py" in render
140. return self._render(context)
File "/home/username/env/lib/python2.7/site-packages/django/template/base.py" in _render
134. return self.nodelist.render(context)
File "/home/username/env/lib/python2.7/site-packages/django/template/base.py" in render
840. bit = self.render_node(node, context)
File "/home/username/env/lib/python2.7/site-packages/django/template/debug.py" in render_node
78. return node.render(context)
File "/home/username/env/lib/python2.7/site-packages/django/template/loader_tags.py" in render
123. return compiled_parent._render(context)
File "/home/username/env/lib/python2.7/site-packages/django/template/base.py" in _render
134. return self.nodelist.render(context)
File "/home/username/env/lib/python2.7/site-packages/django/template/base.py" in render
840. bit = self.render_node(node, context)
File "/home/username/env/lib/python2.7/site-packages/django/template/debug.py" in render_node
78. return node.render(context)
File "/home/username/env/lib/python2.7/site-packages/django/template/loader_tags.py" in render
62. result = block.nodelist.render(context)
File "/home/username/env/lib/python2.7/site-packages/django/template/base.py" in render
840. bit = self.render_node(node, context)
File "/home/username/env/lib/python2.7/site-packages/django/template/debug.py" in render_node
78. return node.render(context)
File "/home/username/env/lib/python2.7/site-packages/compressor/templatetags/compress.py" in render
147. return self.render_compressed(context, self.kind, self.mode, forced=forced)
File "/home/username/env/lib/python2.7/site-packages/compressor/templatetags/compress.py" in render_compressed
107. rendered_output = self.render_output(compressor, mode, forced=forced)
File "/home/username/env/lib/python2.7/site-packages/compressor/templatetags/compress.py" in render_output
119. return compressor.output(mode, forced=forced)
File "/home/username/env/lib/python2.7/site-packages/compressor/css.py" in output
51. ret.append(subnode.output(*args, **kwargs))
File "/home/username/env/lib/python2.7/site-packages/compressor/css.py" in output
53. return super(CssCompressor, self).output(*args, **kwargs)
File "/home/username/env/lib/python2.7/site-packages/compressor/base.py" in output
246. content = self.filter_input(forced)
File "/home/username/env/lib/python2.7/site-packages/compressor/base.py" in filter_input
194. for hunk in self.hunks(forced):
File "/home/username/env/lib/python2.7/site-packages/compressor/base.py" in hunks
169. precompiled, value = self.precompile(value, **options)
File "/home/username/env/lib/python2.7/site-packages/compressor/base.py" in precompile
226. **kwargs)
File "/home/username/env/lib/python2.7/site-packages/django_libsass.py" in input
51. return compile(filename=self.filename)
File "/home/username/env/lib/python2.7/site-packages/django_libsass.py" in compile
41. return sass.compile(**kwargs)
Exception Type: AttributeError at /admin/login/
Exception Value: 'module' object has no attribute 'compile'
最佳答案
(根据要求重新发布我的评论作为答案...)
原始错误:django_libsass.SassCompiler: command not found
意味着它无法导入 django-libsass 库。 (django-compressor 通过尝试将其视为 shell 命令来响应该失败 - django_libsass 不是可运行的命令,所以这也失败了,给出了此处看到的实际错误。)解决方案是确保安装了 django-libsass - 它应该出现在 pip freeze
的输出中。
第二个错误:'module' object has no attribute 'compile'
意味着安装了另一个包,它定义了一个名为 sass
的模块,它正在从 libsass 包中加载来代替我们想要的模块。解决方案是卸载除 django-libsass 和 libsass 之外的所有 sass 相关包。
关于python - Django Sass 压缩器 django_libsass.SassCompiler : command not found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22515611/