2016-05-29 62 views
3

我試圖編譯靜態與django-pipeline,但無法設法在dev模式下靜態服務。由於我不是一個Django開發人員,我可能會錯誤的是Django如何爲自己提供靜態文件。這裏是我的項目結構:Django管道沒有在開發模式下提供文件

  • 項目(項目本身)
    • 項目(設置,全局網址配置等)
    • 應用(主要和唯一的應用程序)
      • static(基於應用程序的靜態文件,命名空間通過應用程序名稱文件夾)
    • 靜態(共享靜態,這不是與特定的應用程序)
      • CSS
        • app.styl
    • 公共
      • media
      • static(未在開發環境中使用;只有生產:應與nginx的送達,通過collectstatic生成自動)

由於我使用的是共享靜態,我指定STATICFILES_DIRS指令,允許Django的開發服務器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-組:

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

結果,產生這樣的HTML:

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

/static/css/app.css收益404

如果我運行collectstaticpublic/static/css/app.css已建成。但正如我理解Django邏輯,它只用於基於apache/nginx的生產服務,而不是在dev之一。在dev模式靜態是通過內部Django服務器與一些中間件django管道掛鉤服務。

我在做什麼錯了?任何幫助表示讚賞,謝謝。

UPD:我添加+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)全球urlpatterns的,但是無法理解就是爲什麼它的建議 - STATIC_ROOT僅用於生產與外部代理服務器,而不是與Django的本身。或不?

+0

如果我設置''PIPELINE_ENABLED':False,'Django每次在開發模式下打開HTTP請求時都會自動收集靜態數據。可以嗎? – f1nn

回答

4

對於每個人,與同樣的問題打架。只需從django-pipeline config中刪除'PIPELINE_ENABLED': True,即可。在此之後,django-pipeline將在dev模式下爲每個請求重新編譯靜態。

而在部署之前,只需運行collectstatic並設置DEBUG=False,正如它在文檔中提到的那樣。在這個管道將停止爲每個請求重新編譯文件之後,在模板中加載縮小的資源,您將能夠使用任何第三方代理服務器(如NGINX)從STATIC_ROOT靜態提供靜態服務。

相關問題