django-pipelineでstatic をコンパイルしようとしていますが、 devモードで static を提供することができません。私は Django 開発者ではないので、Django が静的ファイル自体を提供する方法が間違っている可能性があります。これが私のプロジェクト構造です:
- プロジェクト(プロジェクト自体)
- プロジェクト (設定、グローバル URL 構成など)
- アプリ(メインで唯一のアプリ)
- static (アプリベースの静的ファイル、アプリ名フォルダーによって名前空間が指定されます)
- 静的(特定のアプリにリンクされていない共有静的)
- CSS
- app.style
- CSS
- 公衆
- メディア
- 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.css
404 を返します。
を実行する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 自体ではなく、外部プロキシ サーバーを使用した運用にのみ使用されます。か否か?