标签: django-compressor

如何使用django压缩器与apache?

我一直在使用Django Compressor来管理我的咖啡/少文件,它非常适合开发,但是我有一些问题要让它适用于我的生产部署.

我的想法是让apache托管静态文件,可能在另一台服务器上.我设置COMPRESS_OFFLINE = Truesettings.py文件.

然后我做以下事情

  • python manage.py compress- 这将填充CACHE我的目录中的static目录,其中将收集所有静态文件.
  • python manage.py collectstatic- 这会将我项目中所有应用程序(其中一些不使用压缩程序)的静态文件收集到我的static目录中.
  • static目录复制到apache托管的某个地方.并设置apache来提供文件.
  • 修改文件中的static_url变量settings.py以指向静态服务器.

如果我打开任何页面,我在服务器上收到以下错误,这似乎只发生在我DEBUG = FalseCOMPRESS_OFFLINE = True我的settings.py文件上:

TemplateSyntaxError:夹缝OfflineGenerationError同时呈现:您已启用脱机压缩,但关键"777ba26736d046ab043dc151e7e9a060"从离线清单丢失.您可能需要运行"python manage.py compress".

当我检查static/CACHE目录时,我确认错误是什么,这是我的manifest.json文件:

{
  "6189b8598993d1cbdbd35d4dfd1a6711": "<script type=\"text/javascript\" src=\"http://192.168.1.123/CACHE/js/2f6ca6616bd6.js\"></script>",
  "5c66dbed0e5b766c6e32773cd8585f3c": "<link rel=\"stylesheet\" href=\"http://192.168.1.123/CACHE/css/154d95903951.css\" type=\"text/css\" />"
}
Run Code Online (Sandbox Code Playgroud)

如果我删除CACHE目录并重新运行python manage.py compress,我会在错误消息和清单文件上获得一组新ID,但清单上仍然缺少错误ID.

所以,我想这里有两个问题.为什么不起作用?实现这个目标的正确方法是什么?

谢谢.

apache django django-compressor

5
推荐指数
1
解决办法
2981
查看次数

django-compressor:在DEBUG模式下使用lessc

我不确定我做得对,但问题在于:

  • 我使用django-compressorlessc预处理
  • 一些LESS文件具有相对图像URL.有些是我的,有些是第三方库(例如 Bootstrap)
  • 如果COMPRESS_ENABLEDTrue,所有工作正常
  • COMPRESS_ENABLEDFalse时,CssAbsoluteFilter不运行了,这意味着所有相关的图片网址相对保持,因此被打破(因为它们从相对不是CACHE目录)

我可以想出一个"聪明"的目录结构,其中相对路径解析为同一个文件,无论它们来自CACHE目录还是来自LESS文件目录,但这似乎是一个脆弱的解决方法.

当谈到LESS +时,你通常如何工作django-compressor

django less django-compressor

5
推荐指数
1
解决办法
1614
查看次数

Django Compressor to work with TypeScript

I want Django Compressor to work with Microsoft new language TypeScript.

I downloaded the compiler tsc and it works fine.

When trying to use it with Django Compressor this way:

COMPRESS_PRECOMPILERS = (
    ('text/less', 'lessc {infile} {outfile}'),
    ('text/typescript', 'tsc {infile} {outfile}'),
    )
Run Code Online (Sandbox Code Playgroud)

and

{% compress js %}
        <script type="text/typescript" charset="utf-8">
            var x=3;
            function greeter(person: string) {
            return "Hello, " + person;
            }

            var user = "Jane User";
        </script>
{% endcompress %}
Run Code Online (Sandbox Code Playgroud)

the output is an empty JS script tag …

javascript django django-compressor typescript

5
推荐指数
1
解决办法
1955
查看次数

django-compressor、LESS、相对@import 和相对 url()

我正在使用 django-compressor + LESS。

@import在 .less 文件中的相对url(../image.png)和包含.less文件中的相对有问题。

我会解释。我有下一个文件夹结构:

common/  # Django app with some common stuff, e.g. common button styles
   static/
     common/
       less/buttons.less
       img/icon.png
blog/
  static/
    blog/
      less/blog_buttons.less
Run Code Online (Sandbox Code Playgroud)

在里面buttons.less我有按钮的 mixin:

.button() {
    color: white;
    padding: 4px 10px;
    background: gray url(../img/icon.png) no-repeat 0 0;
}
Run Code Online (Sandbox Code Playgroud)

在里面blog_buttons.less我使用这个mixin:

@import "../../../../common/static/common/less/buttons";

.blog_button {
    .button;
    background-color: orange;
}
Run Code Online (Sandbox Code Playgroud)

这是问题所在:

当 django-compress 预编译我的blog_buttons.less- 按钮背景指向/static/blog/img/icon.png(404 Not Found)。但它应该指向/static/common/img/icon.png

难道我做错了什么?(我觉得应该是一种很常见的情况)

django less django-compressor

5
推荐指数
1
解决办法
706
查看次数

Django Compressor - CloudFront和manifest.json

我在让django压缩器与CloudFront一起工作时遇到了一些麻烦.我正在运行offline compress命令来生成我的压缩文件和manifest.json文件.在此之后,我运行collectstatic将压缩文件上传到我的S3存储桶.

然后从CloudFront提供这些静态文件,因此我的设置如下所示:

STATIC_ROOT = ''
STATIC_URL = 'http://<my-cloudfront-domain>/somebucket/'

STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'

COMPRESS_OFFLINE = True
Run Code Online (Sandbox Code Playgroud)

问题是,CloudFront正在提供旧版本的manifest.json,这意味着压缩器正在抛出一个OfflineGenerationError.

即使有一个缓存后端,我担心如果缓存服务器出于某种原因离线/刷新我的清单文件将是不正确的.

我在这里遗漏了一些东西以确保我没有遇到OfflineGenerationError吗?

amazon-cloudfront django-compressor

5
推荐指数
1
解决办法
857
查看次数

django升级后出现脱机压缩(django_compressor app)错误

我刚刚将Django 1.4.2升级到1.5,我开始在django_compressor出错.

You have offline compression enabled but key "eb225276268ea55d3b90c71df63109d9" is missing from offline manifest. You may need to run "python manage.py compress".
Run Code Online (Sandbox Code Playgroud)

此外,我更新了django_compressor到最后一个版本(实际1.2),仍然得到相同的错误.

当我尝试python manage.py compress时,我注意到:

c:\python27\lib\site-packages\django\utils\hashcompat.py:9: DeprecationWarning: django.utils.hashcompat is deprecated; use hashlib instead DeprecationWarning)
Run Code Online (Sandbox Code Playgroud)

此通知是否与脱机压缩错误有关?

[更新] 我发现另一个有趣的事情......

在我遇到问题的模板中,我删除了所有应该压缩的css:

 {% extends "base.html" %}
    {%  block head %}
        {% load compress %}
        {% compress css %}

        {% endcompress %}
    {% endblock %}
...
Run Code Online (Sandbox Code Playgroud)

我运行python管理:

python manage.py compress 
python manage.py collectstatic   --noinput
Run Code Online (Sandbox Code Playgroud)

没有错误.

但是......问题仍然存在.

You …
Run Code Online (Sandbox Code Playgroud)

django django-compressor

5
推荐指数
1
解决办法
3684
查看次数

如何使用django-compressor和多个导入公共文件的LESS文件?

我在Django项目中组织了模板,使得网站上的每个页面都包含一个"公共"LESS文件,每个页面还可以指定另一个包含页面特定样式的LESS文件.

问题是我需要特定于页面的LESS文件才能引用"common"LESS文件中的变量.我认为,最简单的方法是将变量声明移动到LESS文件可以的单独文件中@import.

但是,Django应用程序使用单独的目录来存储其静态文件.最后,文件系统看起来像这样:

- common
   - static
      - css
         - definitions.less
         - common.less
- other
   - static
      - css
         - other.less

双方common.lessother.less需要进口definitions.less.在这种情况下,common.less这很简单:

@import "definitions.less";
Run Code Online (Sandbox Code Playgroud)

以下是LESS文件实际包含在页面中的方式,以防有助于:

{% load compress %}
{% load static %}

{% compress css %}
    <link href="{% static "css/common.less" %}"
          rel="stylesheet" type="text/less">
{% endcompress %}
Run Code Online (Sandbox Code Playgroud)

什么是最简单的方法来确保两个LESS文件都可以使用公共变量定义?我想避免组合LESS文件有以下几个原因:

  • 它消除了松散耦合的好处(能够停用应用程序,而不会对站点的其余部分产生任何副作用).
  • 由于必须获取所有应用程序的所有样式,因此增加了为单个页面检索的其他数据.

css django less django-compressor

5
推荐指数
1
解决办法
720
查看次数

Django压缩器使用gzip来提供javascript

我正在尝试从amazon s3提供gzip文件.这是我的settings.py:

AWS_IS_GZIPPED = True
AWS_PRELOAD_METADATA = True 
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
STATICFILES_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_STORAGE_BUCKET_NAME = 'elasticbeanstalk-eu-west-1-2051565523'
STATIC_URL = 'https://%s.s3.amazonaws.com/' % AWS_STORAGE_BUCKET_NAME
COMPRESS_OFFLINE = True
COMPRESS_ENABLED = True
COMPRESS_URL = STATIC_URL
COMPRESS_CSS_FILTERS = [
    'compressor.filters.css_default.CssAbsoluteFilter',
    'compressor.filters.cssmin.CSSMinFilter'
]
COMPRESS_JS_FILTERS = [
    'compressor.filters.jsmin.JSMinFilter',
]
COMPRESS_STORAGE = 'compressor.storage.GzipCompressorFileStorage' 
Run Code Online (Sandbox Code Playgroud)

当我这样做时,django为每个*.js和*.css压缩创建*.gz文件,但奇怪的是只有*.css文件作为gzip提供.我可以在aws s3上看到.css文件有Content-Encoding:gzip而*.js没有.这里发生了什么?

python django gzip amazon-web-services django-compressor

5
推荐指数
1
解决办法
2111
查看次数

django-compressor在STATIC_ROOT/app而不是app/static中编译SCSS文件

我们正在使用django-compressordjango.contrib.staticfiles应用程序,我们在运行django开发服务器和处理我们的SCSS时遇到问题:错误的SCSS文件被编译.这是该版本STATIC_ROOT/app也越来越发现,而不是版本的应用程序/静态的.这使得对SCSS的编辑app/static不会反映在编译的CSS中.

删除所有内容可以STATIC_ROOT/app解决问题,但如果collectstatic由于某种原因执行会导致很多混乱.

有没有办法确保编译app/static文件而不是任何现有的STATIC_ROOT/app文件?

我们在django 1.6中使用django-compressor 1.4,并在django设置文件中使用以下设置:

STATICFILES_FINDERS = (
    "django.contrib.staticfiles.finders.FileSystemFinder",
    "django.contrib.staticfiles.finders.AppDirectoriesFinder",
    'compressor.finders.CompressorFinder',
)
COMPRESS_PRECOMPILERS = (
    ("text/x-scss", 'sass --scss'),
)
STATICFILES_DIRS = [] #default
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
Run Code Online (Sandbox Code Playgroud)

python django django-compressor

5
推荐指数
1
解决办法
1122
查看次数

OfflineGenerationError - 密钥不在清单 Json 中

Django 错误:

OfflineGenerationError at / 您启用了离线压缩,但离线清单中缺少键“e3efe8ea14c9eeeff843e0280b54e1d92c293a5018e6d4a0be93a65997d8e246”。您可能需要运行“python manage.py compress”。以下是原文内容:

然后它显示我的 CSS 文件内容。

{% load static %}
@font-face {
    font-family: 'fontawesome';
    src: url('{% static "global/fontawesome-5.0.13/fa-regular-400.woff2" %}') format('woff2'), url('{% static "global/fontawesome-5.0.13/fa-regular-400.woff" %}') format('woff');
}
@font-face {
    font-family: 'NotoSans';
    src: url(" {% static 'global/NotoSans-Regular.ttf' %}") format('truetype');
}
@font-face {
    font-family: 'NotoSans';
    src: url(" {% static 'global/NotoSans-BoldItalic.ttf' %}") format('truetype');
    font-weight: bold;
    font-style: italic;
}
@font-face {
    font-family: 'NotoSans';
    src: url(" {% static 'global/NotoSans-Italic.ttf' %}") format('truetype');
    font-style: italic;
}
@font-face {
    font-family: 'NotoSans';
    src: url(" {% …
Run Code Online (Sandbox Code Playgroud)

django django-compressor

5
推荐指数
1
解决办法
2203
查看次数