2017-05-28 48 views
2

我正在尝试使Django的开发服务器为通过python manage.py collectstatic命令收集的静态文件提供服务。现在我失败了。如何使用Django的开发服务器来收集静态文件?

我的Django的设置文件声明如下:

STATIC_ROOT = os.path.join(WWW_PATH, 'static') 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(ROOT_PATH, 'front', 'public'), 
    os.path.join(ROOT_PATH, 'front', 'dist') 
) 

这从os.path.join(ROOT_PATH, 'front', 'public')os.path.join(ROOT_PATH, 'front', 'dist')STATIC_ROOT使得collectstatic命令复制文件,它完美的作品。

我假设它也会告诉Django查找静态文件到STATIC_ROOT目录,我错了。即使STATIC_ROOT目录不存在,Django也能够提供静态文件。但是,如果缺少os.path.join(ROOT_PATH, 'front'),则Django不再提供静态文件。

这表明Django继续从源目录中提供静态文件,而不是从STATIC_ROOT

所以我想知道是否有方法指示Django的开发服务器提供来自STATIC_ROOT的静态文件。任何提示?

编辑:

后@ e4c5的答案,我修改了我的根urls.py这样的:

static_patterns = [ 
    url(r'^$', TemplateView.as_view(template_name='index.html')) 
] 

urlpatterns = [ 
    url(r'^', include(static_patterns)), 
    url(r'^admin/', admin.site.urls), 
    url(r'^api/resa/', include('reservation.urls')), 
    url(r'^api/auth/', include('authentication.urls')), 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

不幸的是,它并没有预期的结果和Django不查找静态文件STATIC_ROOT,我怀疑它实际上是在STATIC_ROOT中寻找静态文件。

这里是我可以在控制台访问索引页时看到:

[04/Jun/2017 16:18:05] "GET/HTTP/1.1" 200 1411 
[04/Jun/2017 16:18:05] "GET /static/style/index.css HTTP/1.1" 404 1759 
[04/Jun/2017 16:18:05] "GET /static/style/react-datetime.css HTTP/1.1" 404 1786 
[04/Jun/2017 16:18:05] "GET /static/style/react-big-calendar.css HTTP/1.1" 404 1798 
[04/Jun/2017 16:18:05] "GET /static/script/bundle.js HTTP/1.1" 404 1762 

这里设置变量的内容:

>>> from django.conf import settings 
>>> settings.WWW_PATH 
'/home/tryph/PycharmProjects/resa/www' 
>>> settings.STATIC_ROOT 
'/home/tryph/PycharmProjects/resa/www/static' 
>>> settings.STATIC_URL 
'/static/' 

这里是WWW_PATH内容目录:

/home/tryph/PycharmProjects/resa/www 
└── static 
    ├── admin 
    │   [...] 
    ├── favicon.ico 
    ├── index.html 
    ├── rest_framework 
    │   [...] 
    ├── script 
    │   └── bundle.js 
    └── style 
     ├── index.css 
     ├── react-big-calendar.css 
     └── react-datetime.css  
+0

是不是一个文件夹中manage.py命名的背部和'ROOT_PATH = os.path.dirname(BASE_DIR)'' = WWW_PATH os.path中。加入(ROOT_PATH,'www')' 'STATIC_ROOT = os.path.join(WWW_PATH,'static')'表示它正在寻找'app/back/www/static'中的静态文件? – filtfilt

+0

@filtfilt感谢您的建议。 'settings.py'中定义的路径似乎是从'settings.py'位置相对定义的,而不是'manage.py'位置。所以'STATIC_ROOT'路径的一切看起来都很好。请参阅我的编辑更多细节。 – Tryph

+0

这个怎么样? *所有的静态文件都是通过gulp管理的,并且生活在'public'和'dist'dirs * – Robert

回答

2

这是用static.serve

有可能比你的项目的静态资产等文件,为 方便,你想有Django的服务为您在当地 发展。 serve()视图可用于为您提供的任何目录服务。 (这种观点并不硬化生产使用,应该只作为发展援助 ,你应该使用一个真正的前端Web服务器

更改您的urls.py像这样 生产服务于这些文件:

from django.conf import settings 
from django.conf.urls.static import static 
urlpatterns = [ 
    # ... the rest of your URLconf goes here ... 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
+0

感谢您的答案,我刚刚阅读文档,这看起来不错。我目前无法测试它。如果它确实解决了我的问题,我将在稍后接受答案。 – Tryph

+0

那它怎么样? – e4c5

+0

我刚刚尝试过,但不幸的是,它不起作用:/ – Tryph

相关问题