簡體   English   中英

配置Django runserver來提供非app目錄中的靜態文件?

[英]Configuring Django runserver to serve static files in a non-app directory?

我正在嘗試配置Django以在使用runserver時提供靜態文件(生產工作正常)。 一切都適用於apps目錄下的所有靜態文件。 問題出在靜態文件不在特定應用程序下,但在最終的靜態目錄中。 例如,我有這個項目結構:

/myproject/
/myproject/static/
/myproject/static/css/foo.css
/myproject/app1
/myproject/app1/static/css/bar.css

urls.py
if settings.SERVE_STATIC:
    urlpatterns += patterns('',
        url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
            {'document_root': settings.STATIC_ROOT}),
    )
    urlpatterns += staticfiles_urlpatterns() # one of these may be redundant.

settings.py
SERVE_STATIC = True
PROJECT_ROOT = '/myproject'
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(PROJECT_ROOT, 'static'),)
INSTALLED_APPS = ('app1',)

使用這些設置,我收到錯誤:

NotperlyConfigured:STATICFILES_DIRS設置不應包含STATIC_ROOT設置

這是有道理的。 我告訴Django收集靜態文件,並將它們放在同一個地方 - 這可能會導致循環。

如果我注釋掉STATICFILES_DIRS變量,django會找到靜態文件'bar.css'。 但它沒有找到“foo.css”。

如果我注釋掉STATIC_ROOT變量並放回STATICFILES_DIRS,那么它會找到文件'foo.css' - 當然,'collectstatic'命令將不再起作用。

注意 - 我意識到'/ static'目錄應該是空的,但是我所在的項目,無論如何都有文件。 :)只要它們沒有被'collectstatic'覆蓋,看起來像Django runserver應該為它們服務 - 但事實並非如此。

在運行Django runserver時,如何在STATIC_ROOT(例如foo.css)下提供靜態文件?

將/ static /現在的文件移動到另一個目錄 - 例如,調用它/ project-static /。

然后只在urls.py中包含這一行:

urlpatterns += staticfiles_urlpatterns()

(刪除django.views.static.serve視圖)

在settings.py中,使用:

STATICFILES_DIRS = (os.path.join(PROJECT_ROOT, 'project-static'),)

然后你可以將文件放在/ project-static /目錄下的文件系統中,開發服務器將從/ static / URL前綴提供它們,而在生產中, collectstatic會找到它們並將它們放入/ static /目錄所在的Web服務器可以找到它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM