Django 1.7开发文档翻译:管理静态文件(层叠样式单、图片), Managing static files (CSS, images) ¶
作为网站,一般都需要提供 一些额外的文件,例如图片、 JavaScript 和层叠样式单。 在 Django 中,我们称这种文件为 “静态文件” 。 Django提供 了 django.contrib.staticfiles 来帮助妳管理这些文件。
此文档中说明了,妳应当如何提供这种静态文件。
1. 确保 在 INSTALLED_APPS 中包含了 django.contrib.staticfiles 。
2. 在设置文件中定义 STATIC_URL ,例如:
STATIC_URL = '/static/'
3. 在妳的模板中,可有两种处理方式:1,将URL硬编码写在模板里,例如 /static/my_app/myexample.jpg ;或者,更好的方式是,2,使用 static 这个模板标记,以之前所配置的 STATICFILES_STORAGE 存储为基础,加上指定的相对路径来构建完整URL(采用这种方式的话,当妳想要换用内容分发网络(CDN)来发布静态文件时,会狠轻松)。
{% load staticfiles %}
<img src= " {% static "my_app/myexample.jpg" %} " alt= "My image" />
4. 将静态文件放置在妳的应用中的一个名为 static 的目录中。例如 my_app/static/my_app/myimage.jpg 。
提供这些文件 除了这些配置步骤之外,妳还需要真正地提供这些静态文件。 在开发过程中,当 DEBUG 被设置为 True 时,如果妳使用 django.contrib.staticfiles ,则,运行 runserver 时就会自己完成这个过程(参考 django.contrib.staticfiles.views.serve() )。 这个方法是非常低效的,并且,可能还是不安全的,所以,不适合用于产品环境。 参考 部署静态文件 ,以了解,在产品环境中,应当如何正确地提供静态文件。 |
在妳的项目中,可能还有那种并不与特定应用关联的静态文件。 除了在妳的应用内部使用一个 static/ 目 录之外, 还可以在设置文件中定义一个目录列表( STATICFILES_DIRS ),Django 也会到那些目录中找静态文件。例如:
STATICFILES_DIRS = (
os . path . join(BASE_DIR, "static" ),
'/var/www/static/' ,
)
参考 STATICFILES_FINDERS 设置项的文档,以了解, staticfiles 是如何找到妳的文件的。
静态文件命名空间 我们也许可以寄希望于将静态文件直接放置在my_app/static/ (而不是创建另一个名为my_app的子目录)中,但是,那样做不好。Django会使用它所找到的第一个与该名字相匹配的静态文件,因此,如果妳在别的某个应用里有着一个具有相同名字的静态文件的话,Django将无法区分它们。我们需要向Django 告知哪个才是正确的文件,而最简单的办法就是,给它们加上命名空间。即,将那些静态文件放置在专门为相应的应用程序而命名的目录中。 |
如果 妳按照上文所说的使用了 django.contrib.staticfiles 的话,则, 当 DEBUG 被设置为 True 时, runserver 命令会自动完成这件事。如果 妳的 INSTALLED_APPS 中没有 django.contrib.staticfiles ,那么, 妳仍然可以使用 django.contrib.staticfiles.views.serve() 视图来手动提供静态文件 。
这种设置不适合于在产品环境中使用!阅读 部署静态文件 ,以了解一些通用的部署策略。
例如,假设 妳的 STATIC_URL 被定义为 /static/ , 则, 向urls.py 中加入以下代码片断即可:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... 其它 的URL配置代码放置在这里……
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
注意 这个辅助函数仅在以下条件下有效:1,当前处于调试模式;2,并且,所指定的前缀是本地的(例如/static/),而不是一个URL (例如http://static.example.com/)。 另外,这个辅助函数只会提供实际的 STATIC_ROOT 目录中的文件;它不会像 django.contrib.staticfiles 那样进行静态文件的发现。 |
在开发过程中,妳可以使用 django.contrib.staticfiles.views.serve() 视图来提供由用户上传到 MEDIA_ROOT 的媒体文件。
这种设置不适合于在产品环境中使用!阅读 部署静态文件 ,以了解一些通用的部署策略。
例如,假设 妳的 MEDIA_URL 被定义为 /media/ ,则,妳只需向urls.py 中加入以下代码片断就可以了:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... 其它 的URL配置代码放置在这里……
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
注意 这个辅助函数仅在以下条件下有效:1,当前处于调试模式;2,并且,所指定的前缀是本地的(例如/media/),而不是一个URL (例如http://media.example.com/)。 |
当妳在运行着使用实际HTTP 请求进行的测试,而不是采用内置的测试客户端( 也就是说,使用内置的 LiveServerTestCase )来进行测试的时候,需要 像其它内容一样提供静态资源, 这样的话,测试环境 就能够产生出 尽可能真实的测试效果,但是, LiveServerTestCase 只有 狠基本的静态文件提供功能: 它不知道 staticfiles 应用程序的查找功能,因而假设那些静态文件 都已经被收集到 STATIC_ROOT 下了。
正是出于这个原因, staticfiles 自带 了一个 django.contrib.staticfiles.testing.StaticLiveServerTestCase ,它是前面说的那个内置类的子类, 它能够 在测试用 例 执行期间透明地提供所有 的静态资源, 其效果类似于在开发过程中设置 DEBUG = True 的效果, 也就是说,不需要先使用 collectstatic 来收集那些静态文件。
Django 1.7中的变动: django.contrib.staticfiles.testing.StaticLiveServerTestCase 是在Django 1.7 中新加入的。在此之前,它的功能是由 django.test.LiveServerTestCase 提供的。 |
django.contrib.staticfiles 提供 了一个便利性的管理命令,用来将静态文件收集到单个目录中,这样 妳就可以轻易地向浏览器提供它们。
1. 将 STATIC_ROOT 选项设置为指向妳要用来放置静态文件的目录,例如:
STATIC_ROOT = "/var/www/example.com/static/"
2. 运行 collectstatic 这个管理命令:
$ python manage.py collectstatic
这样,会将静态目录中的所有文件复制到 STATIC_ROOT 目录中去。
3. 使用 妳喜欢的网页服务器来提供这些文件的服务。 部署静态文件 中说明了一些针对静态文件的常见部署策略。
此文档说明了一些基本的和通用的用法模式。 若想详细了解 django.contrib.staticfiles 中包含的所有设置选项、命令、模板标记和其它杂项,则阅读 staticfiles参考手册 。
示威 者遭警察直射胡椒喷雾
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands