Django对静态文件的处理——开发阶段

上一篇说完了 Django 为部署阶段所提供的静态文件处理工具,这篇接着说开发阶段。

开发阶段

在 Django 看来,静态文件的处理应该交由另外的程序来处理。但为了方便快速开发,Django 也提供了一些工具,在开发阶段临时顶替来处理静态文件。

一方面,Django 的官方文档中用“quick and dirty”“grossly inefficient”“insecure”等字眼来多次强调不要在实际生产环境中使用这套工具;另一方面,Django 限制只有在 DEBUG 模式下这些工具才能工作。所以,当做辅助工具用就好,不要在生产环境下使用。

另外,与 上一篇中的那些工具一样,这里介绍的工具也在 staticfiles 应用下,都需要首先在 INSTALLED_APPS 中开启 django.contrib.staticfiles 这一项。

分两种情况来说:

  • 如果你是用 runserver 命令在本地启动的 Django 程序,那么这些辅助工具就已经自动开始为你服务了。即,所有 STATIC_URL 下的请求都会自动被处理,显示所需的静态文件。

  • 如果你在本地用的别的服务器(比如 Apache)来启动 Django 程序,那么有以下几种方式来开启静态文件处理程序。

    • 在 URL 配置文件中添加两行内容,如下,

      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)

    • 上个方法只对本地静态文件(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 中的静态文件处理就是这些内容。


转载于:https://my.oschina.net/u/993130/blog/198769

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值