对于Django来说静态文件一般交由Web服务器处理,Django本身不处理静态文件。为了使Django开发环境能够处理静态文件,Django有和生产环境不同的静态文件配置方式。

Django 版本:1.10

开发(Dev)环境配置

一、STATIC_URL, STATICFILES_DIRS, STATIC_ROOT
1. 在app目录下创建static目录,将静态文件和相关文件夹放到此目录下,如your_app/static/img等
2. 确保settings.py中的INSTALLED_APPS中包含django.contrib.staticfiles,以及Debug为True
3. 设置settings.py中的STATIC_URL的值为“/static/”,作用参考5
4. 在模版开头{% load static %}之后,在模版中使用{{ STATIC_URL }}作为静态文件路径前缀。比如css文件your_app/static/css/bootstrap.min.css,那么应用代码为<link href="{% static "css/bootstrap.min.css" %}" rel="stylesheet">
5. 可以测试单独通过url访问静态文件(http://127.0.0.1:8000/static/css/bootstrap.min.css)

6. STATICFILES_DIRS用来配置一些额外的静态文件的地址,如下配置。模版中访问的时候,参考4即可。

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
]

7. STATIC_ROOT, 设置绝对路径, 在collectstatic运行的时候会把静态文件拷贝到这个目录中,其更多的作用是在从开发环境到生产环节过程中移植静态文件。

二、MEDIA_ROOT和MEDIA_URL
MEDIA_ROOT:指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。如果你定义MEDIA_ROOT='/Users/xxx/media/',那么File=models.FileField(upload_to="app01/pic"),上传的文件就会被保存到'/Users/xxx/media/app01/pic'
MEDIA_URL:URL的映射,前后要加上‘/’ 表示从根目录开始,比如“/site_media/”,加上这个属性之后,静态文件的链接前面会加上这个值。

1. 在settings文件中设置MEDIA_URL,比如MEDIA_URL='/media/'

2. 在settings文件中设置MEDIA_ROOT,可以是任意位置(不与STATIC_ROOT相同),用于保存上传的文件

3. urls文件中配置如下,

from django.conf import settings
from django.conf.urls.static import static urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

4. 在settings文件中,TEMPLATES中'context_processors'下面新增'django.template.context_processors.media'

配置好后可以使用浏览器访问上传的文件, http://ip:port/MEDIA_URL/upload_path/file. 比如MEDIA_URL设置的是'/media/',MEDIA_ROOT设置的是'/User/xxx/',在models中设置的文件上传到(upload_to=)'app01/pic',那么文件上传后实际存储地址为/User/xxx/app01/pic. 通过URL访问的话:http://ip:port/media/app01/pic/test.jpg. 在前端模版中访问这个上传的图片: <img src="{{ MEDIA_URL }}app01/pic/test.jpg"">

更多参考官方文档

生产环节部署

在部署阶段最大的不同在于你必须让web服务器来处理静态文件,因此你必须在web服务器中配置,以便能让web服务器能访问静态文件。官方文档参考这里。后面会在自己试验过后补充自己的备注。

最新文章

  1. JS or C#?不存在的脚本之争
  2. paip.提高稳定性---自动检测sleep mysql数据库死连接以及kill
  3. IOS开发UI基础UIView
  4. (转).net Application.DoEvents()的作用
  5. UVA 1395 Slim Span (最小生成树,MST,kruscal)
  6. Java_Hbase Timeout issue
  7. jQuery判断浏览器
  8. 网站全局js代码
  9. object-c编程tips-timer
  10. mapreduce 依赖组合
  11. Java设计模式汇总
  12. Zookeeper笔记1-CAP/BASE理论
  13. linux iptables配置
  14. Spring-cloud(六) Hystrix入门
  15. knn算法详解
  16. 中文编码错误,Error output could not be translated from the native locale to UTF-8.
  17. JAVA中循环删除list中元素
  18. Android Studio添加原生库并自动构建
  19. gdufe1534-小小怪一定认真听课-dfs
  20. 使用Simple MvvmToolkit开发Android和iOS程序

热门文章

  1. BZOJ 2225: [Spoj 2371]Another Longest Increasing (CDQ分治+dp)
  2. NTT数论变换
  3. Core Location Framework学习
  4. sqlserver 获取实例上用户数据库的数据字典
  5. Spring-Security (补充)
  6. 7 Scatter-loading Features
  7. 20140329 自由 youtube
  8. 来个我一起学习Python把!!!(新手共同努力)
  9. 《转》python 10 集合
  10. Selenium(一)---Selenium的安装和使用