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代码更快运行的5种方法
Jun 21 Python
举例讲解Python设计模式编程的代理模式与抽象工厂模式
Jan 16 Python
Python决策树和随机森林算法实例详解
Jan 30 Python
python的staticmethod与classmethod实现实例代码
Feb 11 Python
简单谈谈python基本数据类型
Sep 26 Python
Django 视图层(view)的使用
Nov 09 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 Python
如何用Python破解wifi密码过程详解
Jul 12 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
使用python实现kNN分类算法
Oct 16 Python
python自动点赞功能的实现思路
Feb 26 Python
Python pathlib模块使用方法及实例解析
Oct 05 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之第七天
2006/10/09 PHP
PHP 简单日历实现代码
2009/10/28 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP取二进制文件头快速判断文件类型的实现代码
2013/08/05 PHP
[原创]php实现数组按拼音顺序排序的方法
2017/05/03 PHP
Javascript将string类型转换int类型
2010/12/09 Javascript
javascript解决innerText浏览器兼容问题思路代码
2013/05/17 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
JavaScript获取网页表单action属性的方法
2015/04/02 Javascript
jQuery使用$.ajax进行即时验证的方法
2015/12/08 Javascript
尝试自己动手用react来写一个分页组件(小结)
2018/02/09 Javascript
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
vue下使用nginx刷新页面404的问题解决
2019/08/02 Javascript
layui表格内容溢出的解决方法
2019/09/06 Javascript
JS实现星星海特效
2019/12/24 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
Vue中axios拦截器如何单独配置token
2019/12/27 Javascript
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
基于python计算并显示日间、星期客流高峰
2020/05/07 Python
最新pycharm安装教程
2020/11/18 Python
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
大门门卫岗位职责
2013/11/30 职场文书
单位成立周年感言
2014/01/26 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
房务中心文员岗位职责
2014/04/16 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
工程移交协议书
2016/03/24 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python