【发布时间】:2017-05-28 14:58:12
【问题描述】:
我正在尝试让 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 继续从源目录而不是 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
【问题讨论】:
-
你的 manage.py 不是在一个名为 back 的文件夹中吗?
ROOT_PATH = os.path.dirname(BASE_DIR)WWW_PATH = os.path.join(ROOT_PATH, 'www')STATIC_ROOT = os.path.join(WWW_PATH, 'static')表示它正在寻找app/back/www/static中的静态文件? -
@filtfilt 感谢您的建议。
settings.py中定义的路径似乎是相对于settings.py位置定义的,而不是manage.py位置。因此,STATIC_ROOT路径的一切看起来都不错。请参阅我的编辑了解更多详细信息。 -
这个怎么样? 所有静态文件都由 gulp 管理,并位于“public”和“dist”目录中
-
@Robert 我不记得这条评论了,它可能是来自旧副本/粘贴的人工制品。我将删除它以避免混淆。实际上,
public和dist目录是前端项目存储样式、脚本、图标等的地方......它们是manage.py collectstatic命令查找要复制到www/static中的静态文件的目录 -
服务器重载了吗?
标签: django