staticfiles
app ¶django.contrib.staticfiles
从你的应用(和其他你指定的地方)收集所有静态文件到同一个地方,这样产品就能很容易的被维护
请参见
有关静态文件应用程序和一些使用示例的介绍,请参阅Managing static files (e.g. images, JavaScript, CSS)。 如果你想知道如何部署静态文件, 请参阅 Deploying static files.
django.contrib.staticfiles
公开三个管理命令
collectstatic
¶django-admin collectstatic
¶搜集静态文件到 STATIC_ROOT
.
默认情况下,重复文件名以类似于模板分辨率工作原理的方式解析:将使用首先在指定位置之一找到的文件。 如果您感到困惑,findstatic
命令可以帮助您显示找到的文件。
在随后的collectstatic
运行(如果STATIC_ROOT
不为空),只有文件的修改时间戳大于STATIC_ROOT
因此,如果从INSTALLED_APPS
中删除应用程序,最好使用collectstatic
--clear
选项命令删除陈旧的静态文件。
使用enabled finders
搜索文件。 默认值是查看由STATICFILES_DIRS
中定义的所有位置以及在由INSTALLED_APPS
设置指定的应用程序的'static'
目录中定义的所有位置。
collectstatic
管理命令在每次运行后调用STATICFILES_STORAGE
的post_process()
方法,并传递管理所发现的路径列表命令。 它还接收collectstatic
的所有命令行选项。 默认情况下,它由CachedStaticFilesStorage
使用。
默认情况下,收集的文件从FILE_UPLOAD_PERMISSIONS
接收权限,收集的目录从FILE_UPLOAD_DIRECTORY_PERMISSIONS
接收权限。 如果您希望对这些文件和/或目录使用不同的权限,可以暂存static files storage classes,并指定directory_permissions_mode
和/或file_permissions_mode
像这样:
from django.contrib.staticfiles import storage
class MyStaticFilesStorage(storage.StaticFilesStorage):
def __init__(self, *args, **kwargs):
kwargs['file_permissions_mode'] = 0o640
kwargs['directory_permissions_mode'] = 0o760
super(MyStaticFilesStorage, self).__init__(*args, **kwargs)
然后将STATICFILES_STORAGE
设置为'path.to.MyStaticFilesStorage'
。
一些常用的选项是:
- noinput T0>
,
- 无输入 T0> T1> ¶ T2>
不要提示用户输入任何类型。
- 忽视
模式
,
-一世
模式
¶忽略与此glob样式模式匹配的文件或目录。 使用多次忽略更多。
- 空转 T0>
,
-n T0> T1> ¶ T2>
除了修改文件系统之外,执行所有操作。
- 明确 T0>
,
-c T0> T1> ¶ T2>
在尝试复制或链接原始文件之前清除现有文件。
- 链路 T0>
,
-l T1> ¶ T2>
创建指向每个文件的符号链接,而不是复制。
- 无后处理 T0> T1> ¶ T2>
不要调用配置的STATICFILES_STORAGE
存储后端的post_process()
方法。
- 无 - 缺省 - 忽略 T0> T1> ¶ T2>
不要忽略常用的私有glob样式模式'CVS'
, ”。*”
和'*~'
。
有关选项的完整列表,请参阅命令自己的帮助,运行:
$ python manage.py collectstatic --help
默认忽略模式列表, [ 'CVS', ”。*”, '*〜']
,可以比在每个collectstatic
调用时提供--ignore
命令选项更加持久的定制。 Provide a custom AppConfig
class, override the ignore_patterns
attribute of this class and replace
'django.contrib.staticfiles'
with that class path in your
INSTALLED_APPS
setting:
from django.contrib.staticfiles.apps import StaticFilesConfig
class MyStaticFilesConfig(StaticFilesConfig):
ignore_patterns = [...] # your custom ignore list
findstatic
¶django-admin findstatic staticfile [staticfile ...]
¶使用已启用的查找器搜索一个或多个相对路径。
像这样:
$ python manage.py findstatic css/base.css admin/js/core.js
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
Found 'admin/js/core.js' here:
/home/polls.com/src/django/contrib/admin/media/js/core.js
findstatic
- 第一
¶默认情况下,找到所有匹配的位置。 要仅返回每个相对路径的第一个匹配,请使用--first
选项:
$ python manage.py findstatic css/base.css --first
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
这是一个调试帮助它会显示给定路径将收集哪些静态文件。
通过将--verbosity
标志设置为0,可以抑制额外的输出,只需获取路径名称:
$ python manage.py findstatic css/base.css --verbosity 0
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
另一方面,通过将--verbosity
标志设置为2,可以获取所有搜索的目录:
$ python manage.py findstatic css/base.css --verbosity 2
Found 'css/base.css' here:
/home/special.polls.com/core/static/css/base.css
/home/polls.com/core/static/css/base.css
Looking in the following locations:
/home/special.polls.com/core/static
/home/polls.com/core/static
/some/other/path/static
runserver
¶django-admin runserver [addrport]
¶如果staticfiles
应用程序installed
,则覆盖核心runserver
命令,并添加自动提供的静态文件。 文件服务不能通过MIDDLEWARE
运行。
该命令添加以下选项:
- nostatic T0> T1> ¶ T2>
使用--nostatic
选项可以完全禁止使用staticfiles应用程序提供静态文件。 仅当staticfiles应用位于项目的INSTALLED_APPS
设置中时,此选项才可用。
用法示例:
django-admin runserver --nostatic
- 不安全 T0> T1> ¶ T2>
使用False
选项强制使用staticfiles应用程式提供静态档案,即使DEBUG
设定为--insecure
通过使用此功能,您可以确认严重无效以及可能不安全。 这只适用于本地开发,应从不用于生产,并且仅当staticfiles应用程序位于项目的INSTALLED_APPS
设置时可用。 runserver
--insecure
不适用于CachedStaticFilesStorage
。
用法示例:
django-admin runserver --insecure
StaticFilesStorage
¶存储。
StaticFilesStorage T0> ¶ T1>
使用STATIC_ROOT
设置作为基本文件系统位置和STATIC_URL
设置的FileSystemStorage
存储后端的子类分别作为基本URL。
storage.StaticFilesStorage。
post_process
(路径,**选项)¶此方法在每次运行后由collectstatic
管理命令调用,并将找到的文件的本地存储和路径作为字典以及命令行选项传递。
CachedStaticFilesStorage
在幕后使用它来替换路径与它们的哈希对等体,并适当地更新缓存。
ManifestStaticFilesStorage
¶存储。
ManifestStaticFilesStorage T0> ¶ T1>
StaticFilesStorage
存储后端的子类,通过将文件内容的MD5哈希附加到文件名来存储它处理的文件名。 例如,文件css/styles.css
也将另存为css/styles.55e7cbb9ba48.css
。
此存储的目的是为了在一些页面仍然引用这些文件的情况下继续提供旧文件,例如。因为它们由您或第三方代理服务器缓存。 此外,如果您希望将远期Expires标头应用于已部署的文件,以加快后续网页访问的加载时间,这将非常有帮助。
存储后端会自动使用缓存副本的路径(使用post_process()
方法)替换保存的文件中与其他已保存文件匹配的路径。 默认情况下,用于查找这些路径(django.contrib.staticfiles.storage.HashedFilesMixin.patterns
)的正则表达式涵盖@import规则和url() / t3> 级联样式表的语句。 例如,'css/styles.css'
文件带有内容
@import url("../admin/css/base.css");
将替换为调用ManifestStaticFilesStorage
存储后端的url()
方法,最终保存一个'css/styles.55e7cbb9ba48.css'
具有以下内容:
@import url("../admin/css/base.27e20196a850.css");
storage.ManifestStaticFilesStorage。
max_post_process_passes T0> ¶ T1>
由于静态文件可能会引用需要更换其路径的其他静态文件,因此可能需要多次替换路径,直到文件哈希收敛。 为了防止由于散列不会收敛引起的无限循环(例如,如果'foo.css'
引用'bar.css'
,引用'foo.css'
)在放弃后处理之前存在最大次数。 在大量引用的情况下,可能需要更多的通行证。 通过子类化ManifestStaticFilesStorage
并设置max_post_process_passes
属性来增加最大传递次数。 默认为5。
以前的版本没有进行多次传递,以确保文件散列会聚,所以经常多次文件散列不正确。 添加了max_post_process_passes
属性。
要启用ManifestStaticFilesStorage
,您必须确保满足以下要求:
STATICFILES_STORAGE
设置设置为'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'
DEBUG
设置为False
collectstatic
管理命令收集了所有静态文件在旧版本中,您还必须使用{% load static from staticfiles %}
。 static
模板标签({% load static %} / t3>)现在使用
django.contrib.staticfiles
如果已安装。
由于创建MD5哈希值会对运行时的网站造成负担,因此staticfiles
会自动将所有已处理文件的哈希值映射存储在名为staticfiles.json
。
当您运行collectstatic
管理命令时,会发生这种情况。
storage.ManifestStaticFilesStorage。
manifest_strict T0> ¶ T1>
如果在运行时在staticfiles.json
清单中找不到文件,则会引发一个ValueError
。 可以通过将ManifestStaticFilesStorage
并将manifest_strict
属性设置为False
来禁用此行为 - 不存在的路径将保持不变。
添加了manifest_strict
属性。 在旧版本中,行为与manifest_strict=False
相同。
由于运行collectstatic
的要求,在运行测试时,通常不应使用此存储器,因为collectstatic
不作为正常测试设置的一部分运行。 在测试期间,请确保STATICFILES_STORAGE
设置设置为像'django.contrib.staticfiles.storage.StaticFilesStorage'
(默认值)。
storage.ManifestStaticFilesStorage。
file_hash
(name,content = None)¶创建文件的散列名称时使用的方法。 需要返回给定文件名和内容的哈希值。 默认情况下,它从内容的块计算MD5哈希,如上所述。 随意覆盖此方法使用自己的哈希算法。
CachedStaticFilesStorage
¶存储。
CachedStaticFilesStorage T0> ¶ T1>
staticfiles.json
类似于ManifestStaticFilesStorage
类,但使用Django的caching framework来存储处理文件的哈希名称,而不是静态清单文件CachedStaticFilesStorage
。 这在您无权访问文件系统的情况下非常有用。
如果要覆盖存储使用的高速缓存后端的某些选项,只需在名为'staticfiles'
的CACHES
设置中指定自定义条目即可。 它会回到使用'default'
缓存后端。
警告
CachedStaticFilesStorage
- 几乎所有情况下,ManifestStaticFilesStorage
是一个更好的选择。 当使用CachedStaticFilesStorage
时,由于缓存未命中需要在运行时使用散列文件,因此会导致多项性能下降。 远程文件存储需要几次往返,以缓存未命中的文件进行散列,因为需要几个文件访问来确保文件散列在嵌套文件路径的情况下是正确的。
staticfiles
查找器具有searched_locations
属性,它是查找器搜索的目录路径的列表。 用法示例:
from django.contrib.staticfiles import finders
result = finders.find('css/base.css')
searched_locations = finders.searched_locations
除了staticfiles
应用程序之外还有一些其他助手可以使用静态文件:
django.template.context_processors.static()
上下文处理器,将STATIC_URL
添加到用RequestContext
上下文渲染的每个模板上下文。static
,它接受一个路径,并使用静态前缀STATIC_URL
将其链接。 如果安装了django.contrib.staticfiles
,则标签使用STATICFILES_STORAGE
的url()
方法。get_static_prefix
用于将模板变量填充为静态前缀STATIC_URL
以用作变量或直接。get_media_prefix
,其工作方式类似于get_static_prefix
,但使用MEDIA_URL
。静态文件工具主要用于帮助将静态文件成功部署到生产环境中。 这通常意味着一个单独的,专用的静态文件服务器,这在开发本地时是很麻烦的开销。 因此,staticfiles
应用程序附带了一个快速和脏的帮助视图,您可以使用它在开发中本地提供文件。
观点。
服务
(请求,路径)¶此视图函数在开发中提供静态文件。
注
要猜测提供的文件的内容类型,此视图依赖于来自Python标准库的mimetypes
模块,该模块本身依赖于底层平台的映射文件。 如果您发现此视图没有为特定文件返回正确的内容类型,则很可能是平台的地图文件需要更新。 这可以通过在Debian发行版上安装或更新Red Hat发行版上的mailcap
软件包或mime-support
来实现。
此视图由runserver
自动启用(DEBUG
设置为True
)。 要使用不同本地开发服务器的视图,请将以下代码段添加到主URL配置的末尾:
from django.conf import settings
from django.contrib.staticfiles import views
if settings.DEBUG:
urlpatterns += [
url(r'^static/(?P<path>.*)$', views.serve),
]
注意,模式(r'^static/'
)的开头应该是你的STATIC_URL
设置。
由于这有点麻烦,还有一个帮助函数,将为你做这个:
网址。
staticfiles_urlpatterns T0>()¶ T1>
这将返回正确的URL模式,用于将静态文件提供给已定义的模式列表。 使用它像这样:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
# ... the rest of your URLconf here ...
urlpatterns += staticfiles_urlpatterns()
这将检查您的STATIC_URL
设置,并将视图连接到相应的静态文件。 不要忘记适当地设置STATICFILES_DIRS
设置,让django.contrib.staticfiles
知道除了应用程序目录中的文件之外还要查找文件的位置。
警告
只有DEBUG
设置为 True
,并且 STATIC_URL
设置不为空和完整的URL路径,比如 http://static.example.com/
,这个帮助功能才会工作。
这是因为此视图严重无效,可能不安全。 这只适用于本地开发,应从不用于生产。
测试。
StaticLiveServerTestCase T0> ¶ T1>
这个单元测试TestCase子类扩展django.test.LiveServerTestCase
。
就像父母一样,您可以使用它来编写涉及运行正在测试的代码的测试,并通过HTTP使用测试工具(例如Selenium,PhantomJS等)),因为需要静态资产也被发布。
但是考虑到它使用了上面描述的django.contrib.staticfiles.views.serve()
视图,它可以在测试执行时透明地覆盖由staticfiles
finders。 这意味着您不需要在测试设置之前或作为测试设置的一部分运行collectstatic
。
2017年9月6日