django中STATIC_ROOT和STATICFILES_DIRS区别 及MEDIA_ROOT

来源:互联网 发布:手机淘宝兼职青青岛 编辑:程序博客网 时间:2024/05/22 17:21

staticfiles:这是一个静态资源管理的app,django.contrib.staticfiles。老的版本中,静态资源管理一直是一个问题,部分app发布的时候需要带上静态资源,在部署的时候必须将每个app存在的static(这个目录是自己创建的)静态资源复制到项目根目录下同一个static目录(即staticfiles在项目目录下生成的static,与每个app下的static不同)。引入staticfiles之后,执行命令:python manage.py collectstatic就可以方便的将所用到的app中的静态资源复制到同一目录。


使用python manage.py collectstatic时项目settings.py中必须有(把所有app目录中的static集中到,项目目录中的static中)

STATIC_ROOT = os.path.join(BASE_DIR, "static")否则会提示错误,如下:

raise ImproperlyConfigured("You're using the staticfiles app "
django.core.exceptions.ImproperlyConfigured: You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.



此时如果删除app目录下static目录,会有403错误。

要把settings.py中STATIC_ROOT = os.path.join(BASE_DIR, "static")改为

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]  

省事可以不把app目录下static目录删除也不用在变动修改STATIC_ROOT

app目录下static目录删除也可以,但要在urls.py中加入静态文件处理的代码:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# This will work if DEBUG is True
urlpatterns += staticfiles_urlpatterns()
还要把settings.py中STATIC_ROOT = os.path.join(BASE_DIR, "static")改为

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]  




staticfiles的主要相关配置与分析

  • STATIC_ROOT:运行上边提到的命令:python manage.py collectstatic 之后静态文件将要复制到的目录,这个目录只有在运行collectstatic时候才会用到,不能想当然的以为这个目录和MEDIA_ROOT的作用是相同的,否则在开发环境的时候可能一直无法找到静态文件。

  • STATIC_URL:设置的static file的起始url,这个只是在template里边引用到,这个参数和MEDIA_URL的含义相同

  • STATICFILES_DIRS:和TEMPLATE_DIRS的含义差不多,就是除了各个app的static目录以外还需要管理的静态文件设置,比如项目的公共文件差不多。

  • 各个app目录下的静态文件static/django会自动找到,这个点和app下的templates目录下差不多

urls.py中加入静态文件处理的代码:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# This will work if DEBUG is True
urlpatterns += staticfiles_urlpatterns()


STATIC_ROOT及MEDIA_ROOT
1.3之前只有MEDIA_ROOT,不管是网站静态文件(js、css等)还是用户上传的文件都在同一个目录下。1.3开始两个目录分开了

这个MEDIA目录是在app根目录下新建的,不是项目根目录

阅读全文
0 0
原创粉丝点击