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显示天气预报
Mar 02 Python
Python struct模块解析
Jun 12 Python
简单谈谈Python的pycurl模块
Apr 07 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
Python+OpenCV图片局部区域像素值处理改进版详解
Jan 23 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
如何基于python生成list的所有的子集
Nov 11 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
Python实现微信好友的数据分析
Dec 16 Python
keras绘制acc和loss曲线图实例
Jun 15 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桌面中心(三) 修改数据库
2007/03/11 PHP
php通用防注入程序 推荐
2011/02/26 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
PHP数组函数知识汇总
2016/05/12 PHP
PHP 将dataurl转成图片image方法总结
2016/10/14 PHP
Yii2中简单的场景使用介绍
2017/06/02 PHP
Laravel下生成验证码的类
2017/11/15 PHP
Laravel框架Blade模板简介及模板继承用法分析
2019/12/03 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
浅析JavaScript中var that=this
2017/02/17 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
基于jQuery实现手风琴菜单、层级菜单、置顶菜单、无缝滚动效果
2017/07/20 jQuery
Javascript中this关键字指向问题的测试与详解
2017/08/11 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
详解Vue webapp项目通过HBulider打包原生APP
2018/06/29 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
微信小程序实现列表的横向滑动方式
2020/07/15 Javascript
vue 实现根据data中的属性值来设置不同的样式
2020/08/04 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
Python中List.count()方法的使用教程
2015/05/20 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
python实现AES加密和解密
2019/03/27 Python
python中p-value的实现方式
2019/12/16 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
应届毕业生通用的自荐书范文
2014/02/07 职场文书
个人股份合作协议书
2014/10/24 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
导游词之无锡唐城
2019/12/12 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
springboot 多数据源配置不生效遇到的坑及解决
2021/11/17 Java/Android
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL