Django中的静态文件管理过程解析


Posted in Python onAugust 01, 2019

Static files管理

static files指一些用到的像css,javascript,images之类的文件。

在开发阶段:

1.在settings设置INSTALLED_APPS中添加'django.contrib.staticfiles'。

2.将STATIC_URL设置为'/static/'。

3.将某个app要用的静态文件放置到my_app/static/my_app中,例如my_app/static/my_app/my_image.jpg.

当然也可以直接放在my_app/static中,但这样的话,如果在不同的app中有相同名字的静态文件,就会产生冲突。

4.模板中使用

{% load static %}
<img src="{% static 'my_app/myexample.jpg' %}" alt="My image"/>

5.如果有些不是某个app特用的静态文件,可以建立static文件夹将静态文件放置其中,settings设置:

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

这样,在开发环境中,settings.DEBUG设置为True时,运行runserver就可以访问静态文件了。

如果INSTALLED_APPS中没有包含'django.contrib.staticfiles',需要手动运行django.contrib.staticfiles.views.serve()。

from django.conf import settings
from django.contrib.staticfiles import views
 
if settings.DEBUG:
  urlpatterns += [
    url(r'^static/(?P<path>.*)$', views.serve),
  ]

或者

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

以上都在DEBUG设置为True时起作用。

在生产环境中,就需要使用反向代理服务器直接访问静态文件,需要将静态文件转移到代理服务器可以访问的文件夹,设置

STATIC_ROOT = "/var/www/example.com/static/"

然后运行

python manage.py collectstatic

将各个app内的静态文件及STATICFILES_DIRS内的静态文件收集起来放置到STATIC_ROOT中由服务器apache或nhinx管理即可。

Media管理

MEDIA:指用户上传的文件,比如在Model里面的FileFIeld,ImageField上传的文件。

假如有个Model

from django.db import models 
class Car(models.Model):
  name = models.CharField(max_length=255)
  price = models.DecimalField(max_digits=5, decimal_places=2)
  photo = models.ImageField(upload_to='cars')

设置MEDIA_ROOT=os.path.join(BASE_DIR , 'media'),用来存储用户上传的文件

MEDIA_URL=/media/,为MEDIA_ROOT中的文件建立url地址。

当建立一个Car实例时,Car的ImageField字段图片就存到media/cars文件夹里面

>>> car = Car.objects.get(name="57 Chevy")
>>> car.photo
<ImageFieldFile: chevy.jpg>
>>> car.photo.name
u'cars/chevy.jpg'
>>> car.photo.path
u'/media/cars/chevy.jpg'
>>> car.photo.url
u'/media/cars/chevy.jpg'

在模板中使用图片

<img src="{{ car.photo.url }}" alt="My image"/>

在urls.py中使用 django.contrib.staticfiles.views.serve() view

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

这样就可以使用media文件了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
python实现查询IP地址所在地
Mar 29 Python
Python django使用多进程连接mysql错误的解决方法
Oct 08 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 Python
python批量将excel内容进行翻译写入功能
Oct 10 Python
Python 取numpy数组的某几行某几列方法
Oct 24 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
pytorch梯度剪裁方式
Feb 04 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
Python实战之实现简易的学生选课系统
May 25 Python
pycharm 批量修改变量名称的方法
Aug 01 #Python
python腾讯语音合成实现过程解析
Aug 01 #Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 #Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 #Python
Python中list的交、并、差集获取方法示例
Aug 01 #Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
Aug 01 #Python
Python使用Pandas对csv文件进行数据处理的方法
Aug 01 #Python
You might like
php获取一个变量的名字的方法
2014/09/05 PHP
php去除数组中重复数据
2014/11/18 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
php结合mysql与mysqli扩展处理事务的方法
2016/06/29 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
修改file按钮的默认样式实现代码
2013/04/23 Javascript
javascript中如何处理引号编码&amp;#034;
2013/08/15 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
JS兼容所有浏览器的DOMContentLoaded事件
2018/01/12 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
Postman参数化实现过程及原理解析
2020/08/13 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
python中的闭包用法实例详解
2015/05/05 Python
python 在某.py文件中调用其他.py内的函数的方法
2019/06/25 Python
Jupyter Notebook输出矢量图实例
2020/04/14 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
全球度假村:Club Med
2017/11/27 全球购物
ZWILLING双立人法国网上商店:德国刀具锅具厨具品牌
2019/08/28 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
教师节促销活动方案
2014/02/14 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
公司保洁员管理制度
2015/08/04 职场文书
python实现层次聚类的方法
2021/11/01 Python
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
Java时间工具类Date的常用处理方法
2022/05/25 Java/Android
python实现商品进销存管理系统
2022/05/30 Python