【发布时间】:2014-04-26 06:33:44
【问题描述】:
我正在使用 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'
【问题讨论】:
-
如果您在
manage.py shell内运行from django_libsass import SassCompiler,会收到什么错误消息(如果有)? -
我试过了,没有出现任何错误。我认为错误在 SassCompiler 中的
sass.compile行中出现。担心我的 sass 在 Kevin 的回复后没有正确安装,并让我的主机重新安装它 & cython & libsass & compass。还尝试了gem install sass,它给了我一个带有 sass 的 ruby 文件夹。在此之前,我的站点包文件夹中有一个 sass.so。 -
@gasman,如果有帮助的话,我实际上开始了我的 wagtail 安装过程的整个 blog 编年史。我的大部分错误都在那里详细列出
-
OK - 新错误
'module' object has no attribute 'compile'与您最初报告的错误不同,因此您的设置似乎发生了一些变化:它现在已成功找到 django_libsass,但看起来导入错误'sass'这个名字的东西。请尝试卸载除 libsass 和 django-libsass 之外的所有与 sass 相关的 Python 包。如果这没有任何区别,请在manage.py shell中运行import sass; sass并让我知道输出内容。 -
加斯曼!有效!我爱你!
标签: python django python-2.7 django-compressor wagtail