上一篇说完了 Django 为部署阶段所提供的静态文件处理工具,这篇接着说开发阶段。django
开发阶段服务器
在 Django 看来,静态文件的处理应该交由另外的程序来处理。但为了方便快速开发,Django 也提供了一些工具,在开发阶段临时顶替来处理静态文件。框架
一方面,Django 的官方文档中用“quick and dirty”“grossly inefficient”“insecure”等字眼来屡次强调不要在实际生产环境中使用这套工具;另外一方面,Django 限制只有在 DEBUG 模式下这些工具才能工做。因此,当作辅助工具用就好,不要在生产环境下使用。函数
另外,与 上一篇中的那些工具同样,这里介绍的工具也在 staticfiles 应用下,都须要首先在 INSTALLED_APPS 中开启 django.contrib.staticfiles 这一项。工具
分两种状况来讲:post
若是你是用 runserver 命令在本地启动的 Django 程序,那么这些辅助工具就已经自动开始为你服务了。即,全部 STATIC_URL 下的请求都会自动被处理,显示所需的静态文件。ui
若是你在本地用的别的服务器(好比 Apache)来启动 Django 程序,那么有如下几种方式来开启静态文件处理程序。url
在 URL 配置文件中添加两行内容,以下,spa
1
2
3
4
5
|
from
django.contrib.staticfiles.urls
import
staticfiles_urlpatterns
# ... the rest of your URLconf goes here ...
urlpatterns
+
=
staticfiles_urlpatterns()
|
它会自动将 STATIC_URL 匹配到相应的 STATICFILES_DIRS、应用目录内的 /static 文件夹。(注意不是 STATIC_ROOT)rest
上个方法只对本地静态文件(STATIC)有效,而不会处理用户上传文件(MEDIA)。要让 Django 处理除 STATIC 之外的静态文件,稍微麻烦一点儿,
1
2
3
4
5
6
7
8
9
10
|
from
django.conf
import
settings
# ... the rest of your URLconf goes here ...
if
settings.DEBUG:
urlpatterns
+
=
patterns('',
url(r
'^media/(?P<path>.*)$'
,
'django.views.static.serve'
, {
'document_root'
: settings.MEDIA_ROOT,
}),
)
|
其实与上一个方法的区别就在于,须要分别手动指定 URL 和 本地路径。
有的文章的介绍中不是用 'django.views.static.serve' ,而是 'django.contrib.staticfiles.views.serve',写法略有不一样,但就别纠结了,二者基本上同样。
为了让上个写法更简单点儿,还有一个简单函数 static 能够用,
1
2
3
4
5
6
|
from
django.conf
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)
|
这样能简洁不少。
最后,有两个使用前提要注意:1)要在 DEBUG 模式下使用这些工具;2)STATIC_URL 或 MEDIA_URL 要为本地路径,不能为空,也不能是完整的 URL 格式(好比 http://static.example.com/);
这些用法都没有明显的优劣,选一种就行了。显然不少冗余的功能都是历史遗留的产物。
写到这儿,又想起在练级里边提到过的东西。Django 一开始可能也没有这么复杂,不少功能也许很简陋,但容易理解;随着社区的发展,愈来愈多的东西加进来,为了可以向后兼容,不少类似功能都保留了下来。对于早期使用者来讲这个框架愈来愈好用,但对新手来讲入门愈来愈难,繁多而相似的功能只能干扰视线。开源框架也是产品,你须要在新用户和老用户之间作好权衡。
关于 Django 中的静态文件处理就是这些内容。