问题
在开发中通常会使用到css,js,img等静态文件,关于django如何处理以及配置还是比较纠结,其实官网中有给出详细说明,只是刚入门者容易混,这里记录下配置流程。
配置
1.setting.py先配置
在settings.py中配置静态文件位置,直接给出配置代码:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "core/static"),
]
说明:
- STATIC_URL:
配置url地址,当我们要访问静态文件时url地址,这里只是做其中一部分path,结合urlconf会详细说明;
- STATIC_ROOT:
配置静态文件存放目录,如上代码所示即在工程的static目录下存放这些文件;- STATICFILES_DIRS:
可能我们工程下会有多个app,或者还会牵涉到其它的静态资源文件目录,STATICFILES_DIRS就是列出一些文件目录,如,在app core下static目录,此目录下存放的就是只与该app相关的资源文件;
2.配置url
在urls.py下:
urlpatterns = [
path('', views.home),
path('list/', views.blog_list, name='blog_list'),
path('cal/', views.add, name='cal'),
url(r'^example/(?P<name>[A-Za-z]+)/$', views.example, name="example")
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
3.验证
分别在工程static以及app core的static目录下放文件hello.txt, index.txt
访问结果:
- http://localhost:8000/static/hello.txt 可正常访问;
- http://localhost:8000/static/index.txt 访问不了;
==为什么会这样呐?==
这是因为虽然在STATICFILES_DIRS下配置了app的静态目录,但实际上看url配置就知道访问还是工程目录下的static,这里需要执行下命令:
python manage.py collectstatic
该命令的作用就是copy STATICFILES_DIRS 所声明目录下的文件到static下;至此静态文件配置就可正常工作了;