`

Django静态文件处理总结

 
阅读更多
原文地址:http://blog.csdn.net/wenxuansoft/article/details/8580508


静态文件指像css,js,images之类的文件,在Django里面静态文件的处理与一般的视图是不一样,新手往往容易犯迷糊,本文做一下总结:


一、概述:

     静态文件交由Web服务器处理,Django本身不处理静态文件。简单的处理逻辑如下(以nginx为例):

               URI请求-----> 按照Web服务器里面的配置规则先处理,以nginx为例,主要求配置在nginx.conf里的location

                         |---------->如果是静态文件,则由nginx直接处理

                         |---------->如果不是则交由Django处理,Django根据urls.py里面的规则进行匹配

     以上是部署到Web服务器后的处理方式,为了便于开发,Django提供了在开发环境的对静态文件的处理机制,方法是这样:

    1、在INSTALLED_APPS里面加入'django.contrib.staticfiles',
    2、在urls.py里面加入

[python] view plaincopy
if settings.DEBUG: 
   urlpatterns += patterns('', url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT }),  
        url(r'^static/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.STATIC_ROOT}), ) 

   3、这样就可以在开发阶段直接使用静态文件了。


二、MEDIA_ROOT和MEDIA_URL

而静态文件的处理又包括STATIC和MEDIA两类,这往往容易混淆,在Django里面是这样定义的:

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

MEDIA_ROOT=c:\temp\media,那么File=models.FileField(upload_to="abc/"),上传的文件就会被保存到c:\temp\media\abc
举个例子:

[python] view plaincopy
 
[plain] view plaincopy
class blog(models.Model): 
       Title=models.charField(max_length=64) 
       Photo=models.ImageField(upload_to="photo") 
上传的图片就上传到c:\temp\media\photo,而在模板中要显示该文件,则在这样写{{MEDIA_URL}}blog.Photo


在settings里面设置的MEDIA_ROOT必须是本地路径的绝对路径,一般是这样写

[python] view plaincopy
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__)) 
MEDIA_ROOT=os.path.join(PROJECT_PATH,'media/').replace('\\','/') 

MEDIA_URL是指从浏览器访问时的地址前缀,举个例子:
[python] view plaincopy
MEDIA_ROOT=c:\temp\media\photo 
MEDIA_URL="/data/"                     #可以随便设置 

在开发阶段,media的处理由django处理:

访问http://localhost/data/abc/a.png就是访问c:\temp\media\photo\abc\a.png

在模板里面这样写<img src="{{MEDIA_URL}}abc/a.png">

在部署阶段最大的不同在于你必须让web服务器来处理media文件,因此你必须在web服务器中配置,以便能让web服务器能访问media文件

以nginx为例,可以在nginx.conf里面这样:

     location ~/media/{
   root   /temp/
   break;
}

具体可以参考如何在nginx部署django的资料。


三、STATIC_ROOT和STATIC_URL、
STATIC主要指的是如css,js,images这样文件,在settings里面可以配置STATIC_ROOT和STATIC_URL,配置方式与MEDIA_ROOT是一样的,但是要注意

STATIC_ROOT与MEDIA_ROOT位置不能一样。

STATIC文件一般保存在以下位置:
1、STATIC_ROOT:在settings里面设置,一般用来放一些公共的js,css,images等。

2、app的static文件夹,在每个app所在文夹均可以建立一个static文件夹,然后当运行collectstatic时,Django会遍历INSTALL_APPS里面所有app的static文件夹,将里面所有的文件复制到STATIC_ROOT。因此,如果你要建立可复用的app,那么你要将该app所需要的静态文件放在static文件夹中。

也就是说一个项目引用了很多app,那么这个项目所需要的css,images等静态文件是分散在各个app的static文件的,比较典型的是admin应用。

当你要发布时,需要将这些分散的static文件收集到一个地方就是STATIC_ROOT。


3、STATIC文件还可以配置STATICFILES_DIRS,指定额外的静态文件存储位置。


STATIC_URL的含义与MEDIA_URL类似。

四、小结

  如果你发生在部署阶段找不到css,js,则可能是以下几个问题:

1、web服务器配置有问题,不同的部署方式对静态文件的处理有所不同。

2、没有运行collectstatic将所需要的静态文件收集到STATIC_ROOT

分享到:
评论

相关推荐

    Django 添加静态文件的两种实现方法(必看篇)

    Django添加静态文件有两种方法: 首先setting.py配置文件中添加静态文件的路径: STATICFILES_DIRS = [ os.path.join(BASE_DIR, “statics”),] statices为你所建立的存放静态文件的文件夹名 然后进行引用。 1、...

    Django压缩静态文件的实现方法详析

    开发环境:使用django内置服务器处理静态文件 生产环境:使用apache2/nginx服务器处理静态文件映射 所以在配置时要分清楚开发环境还是生产环境,这个后面会详细介绍。 下面先介绍一下服务器查找静态文件的原理,...

    Django框架静态文件处理、中间件、上传文件操作实例详解

    本文实例讲述了Django框架静态文件处理、中间件、上传文件操作。分享给大家供大家参考,具体如下: Django静态文件处理、中间件、上传文件 静态文件处理 在Django中,一般专门创建一个static目录来存放静态文件(css...

    Django静态资源部署404问题解决方案

    static下存放静态文件,templates下存放网页模板文件 2.修改setting.py 找到 STATIC_ROOT = … 在后面追加一行,然后保存 3.html引入js 4.前端验证 5.后台验证 您可能感兴趣的文章:django 解决自定义序列化...

    django 2.2 whl文件

    django2.2版本的whl安装文件,以及依赖的sqlparse文件,先安装pip install sqlparse,再安装django

    ThemeLove#gitbook_python#13-Django-静态文件处理1

    1.静态文件 1.在项目中的settings.py文件中定义静态文件的引用路径和存放的物理目录 2.在项目根目录下创建static目录,再创建images、cs

    Django上传文件项目.zip

    Django上传文件并自动加载静态资源

    使用Django实现的文件分享系统源码.zip

    使用Django实现的文件分享系统,实现搜索功能,分享功能,用户分享文件查询,写该项目的目的主要是用于保存一些电子书籍和学习资料,方便自己和其他人查找资料,所以对文件大小进行限制最大为5M。 使用Django...

    Django 静态文件配置过程详解

    –&gt; 如果不是则交由Django处理,Django根据urls.py里面的规则进行匹配 以上是部署到Web服务器后的处理方式,为了便于开发,Django提供了在开发环境的对静态文件的处理机制,方法如下: static配置: STATIC主要指的...

    django-livesync:Django应用程序,当Django开发服务器重新启动或修改了静态文件和模板时,它会自动重新加载浏览器

    这是什么项目这是一个简单的Django应用程序,它将在每次重新启动Django Development Server或进行任何静态文件或模板更改时自动重新加载浏览器。 除此之外,如果您在开发服务器上连接多个浏览器和设备,这些浏览器和...

    解决Django加载静态资源失败的问题

    原因:django部署方式比较特别,采用静态文件路径:STATICFILES_DIRS的部署方式,之前你写的相对路径,绝对路径因为缺少静态文件路径而全部失效 做页面显示时,肯定少不了加载css,js等文件吧,但是在Django中,我们...

    python & django 安装文件以及安装入门文件

    python & django 安装文件以及安装入门文件

    django静态文件加载的方法

    那么这些文件在django中如何才能正确加载呢? 首先要在settings文件中进行设置,关于静态文件的设置选项主要由以下几项: 1. STATIC_URL = '/static/' 指定静态文件查找的url。这样设置后一般来说我们只要把静态...

    Django静态文件加载失败解决方案

    主要介绍了Django静态文件加载失败解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    django配置app中的静态文件步骤

    配置静态文件的两种方式: 1 配置单独app下的静态文件,比如某个app下的单独的图片。 2 配置整个project下的静态文件,适用于那些和单独app关联不大的文件,比如jquery bootstrap 等等 配置步骤: 首先,我们需要...

    Apache运行python的django程序配置文件

    Apache运行python的django程序配置文件

    Django多并发处理

    Django多并发处理详细不愁,安装uwsgi+nginx!很实用哦

    django-static-precompile:django 的静态文件预编译器

    它为 django 提供自动静态文件预编译。 目前它仅支持 sass(和指南针)和把手,因为它将 sass 文件转换为 css,将把手文件转换为(预编译的)js。 为什么这个? django 中已经有很多对静态文件的压缩和预编译的支持...

Global site tag (gtag.js) - Google Analytics