我正在尝试使 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')
)
Run Code Online (Sandbox Code Playgroud)
这使得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)
Run Code Online (Sandbox Code Playgroud)
不幸的是,它没有预期的结果并且 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
Run Code Online (Sandbox Code Playgroud)
以下是设置变量的内容:
>>> 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/'
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
这是使用static.serve完成的
\n\n\n\n\n除了您的项目\xe2\x80\x99s 静态资产之外,可能还有其他文件,为了方便起见,您\xe2\x80\x99d 希望让 Django 在本地开发中为您提供服务。serve() 视图可用于为您提供的任何目录提供服务。(此视图未针对生产用途进行强化,仅应用作开发辅助;您应使用真正的前端 Web 服务器在生产中提供这些文件
\n
像这样更改你的 urls.py :
\n\nfrom django.conf import settings\nfrom django.conf.urls.static import static\nurlpatterns = [\n # ... the rest of your URLconf goes here ...\n] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1208 次 |
| 最近记录: |