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运行的17个时新手常见错误小结
Aug 07 Python
python获取目录下所有文件的方法
Jun 01 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
Python生成短uuid的方法实例详解
May 29 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
使用Django和Postgres进行全文搜索的实例代码
Feb 13 Python
解决paramiko执行命令超时的问题
Apr 16 Python
python读取yaml文件后修改写入本地实例
Apr 27 Python
Python如何使用队列方式实现多线程爬虫
May 12 Python
Python如何在main中调用函数内的函数方式
Jun 01 Python
pycharm中如何自定义设置通过“ctrl+滚轮”进行放大和缩小实现方法
Sep 16 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
jquery ui resizable bug解决方法
2010/10/26 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
IE6下opacity与JQuery的奇妙结合
2013/03/01 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
JavaScript简单修改窗口大小的方法
2015/08/03 Javascript
canvas实现手机端用来上传用户头像的代码
2016/10/20 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
微信小程序开发教程之增加mixin扩展
2017/08/09 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
js实现敏感词过滤算法及实现逻辑
2018/07/24 Javascript
Vue+webpack项目配置便于维护的目录结构教程详解
2018/10/14 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
JavaScript交换变量的常用方法小结【4种方法】
2020/05/07 Javascript
Python数组条件过滤filter函数使用示例
2014/07/22 Python
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
Python处理中文标点符号大集合
2018/05/14 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
python使用requests.session模拟登录
2019/08/09 Python
pyenv虚拟环境管理python多版本和软件库的方法
2019/12/26 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
迪奥官网:Dior.com
2018/12/04 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
给交警的表扬信
2014/01/12 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
优质服务口号
2014/06/11 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
Golang中interface{}转为数组的操作
2021/04/30 Golang
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js
Python Pandas 删除列操作
2022/03/16 Python
详解Python中__new__方法的作用
2022/03/31 Python