6

django-pipelineでstatic をコンパイルしようとしていますが、 devモードで static を提供することができません。私は Django 開発者ではないので、Django が静的ファイル自体を提供する方法が間違っている可能性があります。これが私のプロジェクト構造です:

  • プロジェクト(プロジェクト自体)
    • プロジェクト (設定、グローバル URL 構成など)
    • アプリ(メインで唯一のアプリ)
      • static (アプリベースの静的ファイル、アプリ名フォルダーによって名前空間が指定されます)
    • 静的(特定のアプリにリンクされていない共有静的)
      • CSS
        • app.style
    • 公衆
      • メディア
      • static (開発環境では使用されません。本番用のみ: nginx で提供され、collectstatic によって自動生成されます)

共有静的を使用しているため、Django devサーバーとコマンドが共有静的を検索STATICFILES_DIRSできるようにするディレクティブを指定しました。collectstatic

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

これが私のものsettings.pyです:

# for production, should be served via nginx
STATIC_ROOT= os.path.join(BASE_DIR, 'public/static/')
# prefix for static app
STATIC_URL = '/static/'

# also django-pipeline config
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    'pipeline.finders.PipelineFinder',
)
STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'

PIPELINE = {
    'PIPELINE_ENABLED': True,
    'COMPILERS': (
        'pipeline.compilers.stylus.StylusCompiler',
    ),
    'STYLESHEETS': {
        'app': {
            'source_filenames': (
              'css/app.styl',
            ),
            'output_filename': 'css/app.css',
        },
    },
}

私のテンプレートでは、CSS-group を指定しました:

  {% load pipeline %}
  {% stylesheet 'app' %}
</head>

その結果、次のような HTML が生成されます。

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

しかし、/static/css/app.css404 を返します。

を実行するcollectstaticと、public/static/css/app.cssビルドされます。しかし、私が Django のロジックを理解しているように、これは apache/nginx ベースの本番環境でのみ使用され、開発環境では使用されませ開発モードでは、いくつかのミドルウェア django-pipeline フックを備えた内部 Django サーバーを介して static が提供されます。

私が間違っていることは何ですか?どんな助けでも大歓迎です、ありがとう。

UPD:グローバル urlpatterns に追加+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)しましたが、なぜそれが推奨されるのか理解できません — STATIC_ROOT は、Django 自体ではなく、外部プロキシ サーバーを使用した運用にのみ使用されます。か否か?

4

2 に答える 2

11

みんなのために、同じ問題と戦っています。'PIPELINE_ENABLED': True,django-pipeline 構成から削除するだけです。この後、django-pipeline は dev モードでリクエストごとに static を再コンパイルします。

ドキュメントに記載されているように、展開する前に、 を実行collectstaticして設定するだけです。DEBUG=Falseこのパイプラインがリクエストごとにファイルの再コンパイルを停止した後、縮小されたアセットをテンプレートにロードすると、STATIC_ROOTNGINX などのサードパーティのプロキシ サーバーを使用して静的なサービスを提供できるようになります。

于 2016-05-31T09:27:18.303 に答える