我正在尝试使Django的开发服务器提供由python manage.py collectstatic
命令收集的静态文件。现在我失败了。
我的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')
)
这使得collectstatic
命令可以将文件从os.path.join(ROOT_PATH, 'front', 'public')
和os.path.join(ROOT_PATH, 'front', 'dist')
复制到STATIC_ROOT
,并且运行正常。
我假设它也会告诉Django在STATIC_ROOT
目录中查找静态文件,我错了。即使STATIC_ROOT
目录不存在,Django也能够提供静态文件。但如果缺少os.path.join(ROOT_PATH, 'front')
,则Django不再提供静态文件。
这表明Django继续从sources目录提供静态文件,而不是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 :(得分: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)