django 静态资源

理解django.contrib.staticfiles

Django 1.3 包含了一个新的 APP django.contrib.staticfiles 来帮助开发者管理渲染页面所需的js、css 等静态文件。在 1.3 之前,所有的静态文件都是用 MEDIA_URL 和 MEDIA_ROOT 来控制的。为了和用户上传的文件作区分,staticfiles 的使我们可以将静态文件分配到 APP 目录或任意你指定的目录,分发 APP 时就更为方便了。

MEDIA_XXX 和 STATIC_XXX 配置项的区别
  • MEDIA_XXX 配置项用来管理用户上传的文件。通常经由 FileFields 字段上传它们保存在settings.MEDIA_ROOT 指定的目录下,通过 settings.MEDIA_URL 指定的路径访问;
  • STATIC_XXX 配置项用来管理静态资源文件。CSS / JS 文件、png/jpg 图片等 app 提供的静态资源。它们通过 manage.py collectstatic 命令汇集到 settings.STATIC_ROOT 目录,并通过settings.STATIC_URL 指定的路径访问。
使用 staticfiles
STATIC_ROOT 配置项

STATIC_ROOT 被用来指定执行 manage.py collectstatic 时静态文件存放的路径。在生产环境下,集中存放静态资源有用利于使用 Lighttpd / Nginx 托管静态资源。为了方便调试,通常设置如下:

SITE_ROOT = os.path.dirname(os.path.abspath(__file__))

SITE_ROOT=os.path.abspath(os.path.join(SITE_ROOT,'../'))

STATIC_ROOT = os.path.join(SITE_ROOT,'collectedstatic')

STATIC_URL 配置项

在 Django 模板中,我们可以引用 {{ STATIC_URL }} 变量避免把路径写死。通常设置如下:

STATIC_URL='/static/'

  • 小结

  • MEDIA_ROOT:主要是为了存放上传的文件,比如在ImageField中,这个值加上upload_to的值就是真实存放上传图片的文件位置;Django里边文件内容实际上是不会存放到数据库里边的,大多数数据库存放数据效率低,需要保存在文件系统里。
  • MEDIA_URL:URL的映射,前后要加上‘/’ 表示从根目录开始,比如“/site_media/”,加上这个属性之后,静态文件的链接前面会加上这个值。
  • STATIC_ROOT:在这个文件里边的目录会当成静态文件处理。但是不能把自己辛苦写的Javascript或者图片等静态文件放进去。
  • STATIC_URL:URL映射,指定静态目录的URL,默认的是"/static/"。
  • STATICFILES_DIRS:指定一个工程里边哪个目录存放了与这个工程相关的静态文件,是一个列表。如果列表中有一个是“/home/shishang/test/static”,其中有一个文件内容是productlist.html, 我们只要访问http://localhost:8000/static/productlist.html就可以直接访问界面了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果 Django 无法加载静态资源,可能是因为以下原因之一: 1. STATICFILES_DIRS 设置不正确:在 settings.py 文件中,确保 STATICFILES_DIRS 设置为包含你静态文件目录的路径。例如,如果你的静态文件位于 my_project/static/ 中,则应将其添加到 STATICFILES_DIRS 中:`STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]`。 2. STATIC_ROOT 设置不正确:在 settings.py 文件中,确保 STATIC_ROOT 设置为你希望 Django 收集所有静态文件的目录。例如,如果你希望 Django 将静态文件收集到 my_project/staticfiles/ 目录中,则应将其设置为:`STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')`。 3. STATICFILES_FINDERS 设置不正确:在 settings.py 文件中,确保 STATICFILES_FINDERS 包含正确的查找器。通常情况下,你需要包含 'django.contrib.staticfiles.finders.FileSystemFinder' 和 'django.contrib.staticfiles.finders.AppDirectoriesFinder'。 4. 静态文件未正确配置:在 urls.py 文件中,确保你正确地配置了静态文件的 URL。例如,如果你的静态文件位于 my_project/static/ 中,则应该添加以下代码:`from django.conf.urls.static import static from django.conf import settings urlpatterns = [ # ... your URL patterns here ... ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)`。 如果以上方法都没有解决问题,你可以检查你的静态文件目录和文件是否存在,以及文件是否具有正确的权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值