`

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

分享到:
评论

相关推荐

    python django 访问静态文件出现404或500错误

    总结来说,解决Django访问静态文件出错的问题,主要涉及检查`DEBUG`设置、设置`STATIC_URL`和`STATICFILES_DIRS`、配置静态文件查找器以及在Web服务器配置中正确映射静态文件。正确地执行这些步骤将确保你的用户能够...

    解决Django生产环境无法加载静态文件问题的解决

    #### 二、理解Django静态文件处理机制 为了更好地解决问题,首先需要了解Django是如何处理静态文件的。 - **开发环境**:在开发环境下,当`settings.DEBUG = True`时,Django会自动处理静态文件请求。也就是说,...

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

    总结起来,Django的静态文件处理、中间件和上传文件操作是构建高效、安全Web应用的重要组成部分。理解并熟练掌握这些概念,将有助于提升Django项目的质量和用户体验。通过合理配置和利用这些功能,开发者可以创建出...

    Django 静态文件配置过程详解

    ### Django静态文件配置详解 #### 一、概述 在Django框架中,处理静态文件是一项基本但重要的功能。静态文件通常包括CSS样式表、JavaScript脚本、图像等资源,它们对于构建网页应用至关重要。在Django中,这些静态...

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

    总结一下,Django处理静态文件的两种主要方式是直接在HTML中引用和使用`{% static %}`模板标签。理解并熟练掌握这些方法对于高效地开发和部署Django应用至关重要。同时,合理地组织和管理静态文件,以及正确配置`...

    Django多并发处理

    ### Django多并发处理详解 #### 一、问题背景与需求分析 在现代Web应用开发中,随着业务量的增长,单一的请求处理模型往往无法满足高并发场景的需求。Django作为一款基于Python的流行Web框架,虽然功能强大且易于...

    django静态文件加载的方法

    Django作为一款流行的Python Web框架,提供了高效的方式来处理静态文件。所谓静态文件,通常是指那些不会经常变动的文件,如CSS样式表、JavaScript脚本和图片等。正确加载和管理静态文件对Web应用的性能、安全性和可...

    详解Django模版中加载静态文件配置方法

    总结来说,Django处理静态文件的流程包括配置静态文件的URL前缀,定义静态文件的来源目录,正确组织静态文件的目录结构,以及在模板中使用`static`标签引用这些文件。在开发过程中,可以使用Django的内置服务器来...

    10分钟入手django

    在视图函数中,我们不直接处理静态文件,而是让Web服务器负责。在部署时,应使用collectstatic命令将所有静态文件收集到一个目录,便于服务器服务。 **文件上传** Django提供了强大的文件上传功能。在模型中,我们...

    Djang中静态文件配置方法

    总结来说,Django中的静态文件配置涉及到多个设置项,包括`STATIC_ROOT`、`STATIC_URL`以及`ADMIN_MEDIA_PREFIX`,它们共同确保了静态文件在开发和生产环境中的正确管理和访问。理解这些配置项的工作原理,以及它们...

    Django使用模板后无法找到静态资源文件问题解决

    这个问题主要是由于Django的静态文件处理机制导致的。在深入探讨解决方案之前,我们需要先了解Django的静态文件管理和模板系统的基础知识。 **Django的静态文件管理** Django提供了方便的方式来管理和处理静态资源...

    如何在Django项目中引入静态文件

    总结来说,Django中引入静态文件涉及创建`static`目录、配置`settings.py`以及在模板中使用模板标签。而从前端提交数据到后端则包括创建HTML表单、定义URL路由和编写处理数据的视图函数。理解并熟练运用这些概念对于...

    django之静态文件 django 2.0 在网页中显示图片的例子

    Django框架作为流行的Python Web开发框架,提供了管理静态文件和媒体文件(如图片、视频)的机制。本文将会详细介绍如何在Django 2.0版本中通过配置settings.py和urls.py来实现静态文件和图片的显示。 首先,我们要...

    python Django web 实训项目的实验报告

    - **文件结构**: 项目通常遵循标准的Django应用结构,包括`app1`等应用目录,其中包含了模型(models.py)、视图(views.py)、模板(templates)和静态文件(static)等。 - **SETTINGS配置**: Django的settings.py...

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

    在生产环境中,为了提高页面加载速度和安全性,通常不会使用Django来直接服务静态文件,而是将静态文件交给如Apache或Nginx等Web服务器来处理。 1. **配置静态文件路径**:在settings.py中指定STATIC_ROOT为服务器...

    python+django加载静态网页模板解析.docx

    ### Python + Django 加载静态网页模板解析 ...同时,这也为后续学习更复杂的Django功能(如模型、表单处理等)打下了良好的基础。希望本文能帮助读者更好地理解和掌握如何使用Django加载静态网页模板。

    Django学习教程之静态文件的调用详解

    总结一下,Django中管理静态文件的关键在于配置`settings.py`中的`STATIC_URL`、`STATIC_ROOT`、`STATICFILES_DIRS`以及`STATICFILES_FINDERS`。理解这些配置的作用,并正确设置它们,能够确保在开发和部署阶段都...

    django开发完美博客

    项目还可能包含了静态文件(如CSS、JavaScript)和媒体文件(用户上传的图片等)。Django提供管理这些文件的方法,确保在生产环境中能正确处理。 最后,Django的Migrations系统用于数据库版本控制,确保开发者在...

Global site tag (gtag.js) - Google Analytics