【问题标题】:Django pipeline doesn't load assetsDjango 管道不加载资产
【发布时间】:2014-10-08 17:27:59
【问题描述】:

我已经关注this tutorial 制作了一个示例项目。文件结构为:

- mysite
    - mysite
         - __init__.py
         - settings.py
         - urls.py
         - wsgi.py
    - polls
         - migrations
         - templates
             - polls.html
         - static
             - script.js
             - style.css
         - admin.py
         - models.py
         - tests.py
         - urls.py
         - views.py
    - manage.py

一切正常,但问题在于使用Django-pipeline 管理资产。我已将我的项目配置为与以下代码相同,但它没有正确加载资产。

settings.py

INSTALLED_APPS = (
    .
    .
    'django.contrib.staticfiles',
    'pipeline',
    'polls',
)

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
PIPELINE_ENABLED = True
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
PIPELINE_CSS_COMPRESSOR = 'pipeline.compressors.cssmin.CSSMinCompressor'
PIPELINE_CSSMIN_BINARY = 'cssmin'
PIPELINE_JS_COMPRESSOR = 'pipeline.compressors.slimit.SlimItCompressor'

PIPELINE_CSS = {
    'pollsX': {
        'source_filenames': (
          'style.css',
        ),
        'output_filename': 'styles1.css',
        'variant': 'datauri',
    },
}
PIPELINE_JS = {
    'pollsX': {
        'source_filenames': (
          'script.js',
        ),
        'output_filename': 'scripts1.js',
    }
}

polls.html

{% load compressed %}
{% compressed_css 'pollsX' %}

<div class='red-me'>
    <h1> Hi! I'm a templ! </h1>
</div>

style.css

.red-me {
    color: red;
}

http://127.0.0.1/polls 的生成输出是

<link href="/static/styles1.css" rel="stylesheet" type="text/css" />

<div class='red-me'>
    <h1> Hi! I'm a templ! </h1>
</div>

无法在浏览器中加载/static/styles1.css 文件。甚至,我测试了./manage.py collectstatic,但没有任何成功。我错过了什么吗?

Python-3.4 和 Django-1.7

【问题讨论】:

  • 嗨!运行colletstatic 之后,是否生成了styles1.css?问题的任何更新?
  • 是的,就是它。问题在于模式DEBUG=False。它不会从收集的静态文件中加载styles1.css

标签: python django django-pipeline


【解决方案1】:

Django 管道更新非常频繁,因此您的特定教程已经过时了。 但无论如何我想回答你的问题,因为我刚刚花了几个小时用新管道解决了同样的问题,并想分享我的解决方案,希望它对某人有所帮助。

一切都适用于:

  • Django==1.9.1
  • django-pipeline==1.6.4

settings.py

INSTALLED_APPS = (
    .
    .
    'django.contrib.staticfiles',
    'pipeline',
    'polls',
)

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'pipeline.finders.PipelineFinder',
)

STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'

PIPELINE = {
    'CSS_COMPRESSOR': 'pipeline.compressors.cssmin.CSSMinCompressor',
    'CSSMIN_BINARY': 'cssmin',
    'JS_COMPRESSOR': 'pipeline.compressors.slimit.SlimItCompressor',
    'STYLESHEETS': {
        'pollsX': {
            'source_filenames': (
                'style.css',
            ),
            'output_filename': 'css/styles1.css',
            'variant': 'datauri',
        },
    },
    'JAVASCRIPT': {
        'pollsX': {
            'source_filenames': (
                'script.js',
            ),
            'output_filename': 'js/scripts1.js',
        },
    }
}   

polls.html

{% load pipeline %}
{% stylesheet 'pollsX' %}
{% javascript 'pollsX' %}

<div class='red-me'>
    <h1> Hi! I'm a templ! </h1>
</div>

【讨论】:

    【解决方案2】:

    我认为你拼错了你的 css 文件名。 而不是使用:

    <link href="/static/styles1.css" rel="stylesheet" type="text/css" />
    

    用途:

    <link href="/static/style.css" rel="stylesheet" type="text/css" />
    

    【讨论】:

    • 他不需要指定他的压缩文件名,当 PIPELINE_ENABLED = True 时会由 {% load pipeline %} 和 {% javascript 'homejs' %} 自动完成
    • 我指的是一个潜在的错字。与压缩文件名无关。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多