[英]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.