{"title":"staticfiles 应用","version":"5.1","locale":"zh-hans","docname":"ref/contrib/staticfiles","url":"/zh-hans/5.1/ref/contrib/staticfiles/","canonical":"https://djangodocs.dev/zh-hans/5.1/ref/contrib/staticfiles/","summary":"django.contrib.staticfiles 从你的每一个应用程序（以及你指定的任何其他地方）收集静态文件到一个单一的位置，可以很容易地在生产中服务。 See also 关于静态文件应用的介绍和一些使用示例，请参见 如何管理静态文件（如图片、JavaScript、CSS） 。关于部署静态文件的指南，请参见…","html":"<span id=\"the-staticfiles-app\"></span><h1><code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 应用<a class=\"heading-anchor\" href=\"#module-django.contrib.staticfiles\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code> 从你的每一个应用程序（以及你指定的任何其他地方）收集静态文件到一个单一的位置，可以很容易地在生产中服务。</p>\n<aside class=\"admonition admonition-seealso\">\n<p class=\"admonition-title\">See also</p>\n<p>关于静态文件应用的介绍和一些使用示例，请参见 <a class=\"reference internal\" href=\"/zh-hans/5.1/howto/static-files/\"><span class=\"doc\">如何管理静态文件（如图片、JavaScript、CSS）</span></a>。关于部署静态文件的指南，请参见 <a class=\"reference internal\" href=\"/zh-hans/5.1/howto/static-files/deployment/\"><span class=\"doc\">如何部署静态文件</span></a>。</p>\n</aside>\n<section id=\"settings\">\n<span id=\"staticfiles-settings\"></span><h2>配置<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>关于以下配置，请参见 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#settings-staticfiles\"><span class=\"std std-ref\">静态文件配置</span></a>：</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATICFILES_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_DIRS</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_FINDERS</span></code></a></p></li>\n</ul>\n</section>\n<section id=\"management-commands\">\n<h2>管理命令<a class=\"heading-anchor\" href=\"#management-commands\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code> 公开了三个管理命令。</p>\n<section id=\"collectstatic\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code><a class=\"heading-anchor\" href=\"#collectstatic\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"std django-admin\">\n<dt class=\"sig sig-object std\" id=\"django-admin-collectstatic\">\n<span class=\"sig-name descname\"><span class=\"pre\">django-admin</span> <span class=\"pre\">collectstatic</span></span><a class=\"heading-anchor\" href=\"#django-admin-collectstatic\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>将静态文件收集到 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> 中。</p>\n<p>重复的文件名默认的解析方式与模板解析的方式类似：首先在指定位置找到的文件将被使用。如果你感到困惑， <a class=\"reference internal\" href=\"#django-admin-findstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">findstatic</span></code></a> 命令可以帮助你显示哪些文件被找到。</p>\n<p>在随后运行 <code class=\"docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code> 时（如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code> 不是空的），只有当文件的修改时间戳大于 <code class=\"docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code> 中文件的时间戳时，才会被复制。因此，如果你从 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 中删除一个应用程序，最好使用 <a class=\"reference internal\" href=\"#cmdoption-collectstatic-clear\"><code class=\"xref std std-option docutils literal notranslate\"><span class=\"pre\">collectstatic</span> <span class=\"pre\">--clear</span></code></a> 选项来删除过时的静态文件。</p>\n<p>通过使用 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATICFILES_FINDERS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">启用的查找器</span></code></a> 搜索文件。默认情况是在 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATICFILES_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_DIRS</span></code></a> 中定义的所有位置和 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 配置指定的应用程序的 <code class=\"docutils literal notranslate\"><span class=\"pre\">'static'</span></code> 目录中查找。</p>\n<p><a class=\"reference internal\" href=\"#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> 管理命令在每次运行后调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 存储后端的 <a class=\"reference internal\" href=\"#django.contrib.staticfiles.storage.StaticFilesStorage.post_process\" title=\"django.contrib.staticfiles.storage.StaticFilesStorage.post_process\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">post_process()</span></code></a> 方法，并传递由管理命令找到的路径列表。它还接收 <a class=\"reference internal\" href=\"#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> 的所有命令行选项。默认情况下，这由 <a class=\"reference internal\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage\" title=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code></a> 使用。</p>\n<p>默认情况下，收集的文件从 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-FILE_UPLOAD_PERMISSIONS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FILE_UPLOAD_PERMISSIONS</span></code></a> 中获得权限，收集的目录从 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-FILE_UPLOAD_DIRECTORY_PERMISSIONS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">FILE_UPLOAD_DIRECTORY_PERMISSIONS</span></code></a> 中获得权限。如果你希望这些文件和／或目录有不同的权限，你可以将 <a class=\"reference internal\" href=\"#staticfiles-storages\"><span class=\"std std-ref\">静态文件存储类</span></a> 中的任何一个子类化，并分别指定 <code class=\"docutils literal notranslate\"><span class=\"pre\">file_permissions_mode</span></code> 和／或 <code class=\"docutils literal notranslate\"><span class=\"pre\">directory_permissions_mode</span></code> 参数。例如：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.staticfiles</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">storage</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyStaticFilesStorage</span><span class=\"p\">(</span><span class=\"n\">storage</span><span class=\"o\">.</span><span class=\"n\">StaticFilesStorage</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;file_permissions_mode&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mo\">0o640</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;directory_permissions_mode&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mo\">0o760</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>然后在 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a> 设置中将 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 存储后端设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">'path.to.MyStaticFilesStorage'</span></code>。</p>\n<p>一些常用的选项是：</p>\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-collectstatic-noinput\">\n<span id=\"cmdoption-collectstatic-no-input\"></span><span class=\"sig-name descname\"><span class=\"pre\">--noinput</span></span><span class=\"sig-prename descclassname\"></span><span class=\"sig-prename descclassname\"><span class=\"pre\">,</span> </span><span class=\"sig-name descname\"><span class=\"pre\">--no-input</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-collectstatic-noinput\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>不要提示用户进行任何形式的输入。</p>\n</dd></dl>\n\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-collectstatic-ignore\">\n<span id=\"cmdoption-collectstatic-i\"></span><span class=\"sig-name descname\"><span class=\"pre\">--ignore</span></span><span class=\"sig-prename descclassname\"> <span class=\"pre\">PATTERN</span></span><span class=\"sig-prename descclassname\"><span class=\"pre\">,</span> </span><span class=\"sig-name descname\"><span class=\"pre\">-i</span></span><span class=\"sig-prename descclassname\"> <span class=\"pre\">PATTERN</span></span><a class=\"heading-anchor\" href=\"#cmdoption-collectstatic-ignore\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>忽略与此 glob 样式模式匹配的文件、目录或路径。多次使用可以忽略更多的文件、目录或路径。当指定路径时，始终使用正斜线，即使在 Windows 上也是如此。</p>\n</dd></dl>\n\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-collectstatic-dry-run\">\n<span id=\"cmdoption-collectstatic-n\"></span><span class=\"sig-name descname\"><span class=\"pre\">--dry-run</span></span><span class=\"sig-prename descclassname\"></span><span class=\"sig-prename descclassname\"><span class=\"pre\">,</span> </span><span class=\"sig-name descname\"><span class=\"pre\">-n</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-collectstatic-dry-run\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>除了修改文件系统外，其他都要做。</p>\n</dd></dl>\n\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-collectstatic-clear\">\n<span id=\"cmdoption-collectstatic-c\"></span><span class=\"sig-name descname\"><span class=\"pre\">--clear</span></span><span class=\"sig-prename descclassname\"></span><span class=\"sig-prename descclassname\"><span class=\"pre\">,</span> </span><span class=\"sig-name descname\"><span class=\"pre\">-c</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-collectstatic-clear\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>在尝试复制或链接原始文件之前，先清除现有文件。</p>\n</dd></dl>\n\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-collectstatic-link\">\n<span id=\"cmdoption-collectstatic-l\"></span><span class=\"sig-name descname\"><span class=\"pre\">--link</span></span><span class=\"sig-prename descclassname\"></span><span class=\"sig-prename descclassname\"><span class=\"pre\">,</span> </span><span class=\"sig-name descname\"><span class=\"pre\">-l</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-collectstatic-link\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>为每个文件创建一个符号链接，而不是复制。</p>\n</dd></dl>\n\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-collectstatic-no-post-process\">\n<span class=\"sig-name descname\"><span class=\"pre\">--no-post-process</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-collectstatic-no-post-process\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>不要从 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a> 中配置的 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 存储后端调用 <a class=\"reference internal\" href=\"#django.contrib.staticfiles.storage.StaticFilesStorage.post_process\" title=\"django.contrib.staticfiles.storage.StaticFilesStorage.post_process\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">post_process()</span></code></a> 方法。</p>\n</dd></dl>\n\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-collectstatic-no-default-ignore\">\n<span class=\"sig-name descname\"><span class=\"pre\">--no-default-ignore</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-collectstatic-no-default-ignore\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>不要忽视常见的私有 glob 样式模式 <code class=\"docutils literal notranslate\"><span class=\"pre\">'CVS'</span></code>、<code class=\"docutils literal notranslate\"><span class=\"pre\">'.*'</span></code> 和 <code class=\"docutils literal notranslate\"><span class=\"pre\">'*~'</span></code>。</p>\n</dd></dl>\n\n<p>完整的选项列表，请参考命令本身的帮助，运行：</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>collectstatic<span class=\"w\"> </span>--help\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py collectstatic --help\n</code></pre></div></div></div>\n<section id=\"customizing-the-ignored-pattern-list\">\n<span id=\"customize-staticfiles-ignore-patterns\"></span><h4>自定义忽略的模式列表<a class=\"heading-anchor\" href=\"#customizing-the-ignored-pattern-list\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h4>\n<p>默认的忽略模式列表 <code class=\"docutils literal notranslate\"><span class=\"pre\">['CVS',</span> <span class=\"pre\">'.*',</span> <span class=\"pre\">'*~']</span></code>，可以用比在每次 <code class=\"docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code> 调用时提供 <code class=\"docutils literal notranslate\"><span class=\"pre\">--ignore</span></code> 命令选项更持久的方式进行自定义。提供一个自定义的 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/applications/#django.apps.AppConfig\" title=\"django.apps.AppConfig\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">AppConfig</span></code></a> 类，覆盖这个类的 <code class=\"docutils literal notranslate\"><span class=\"pre\">ignore_patterns</span></code> 属性，并在你的 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 设置中用该类路径替换 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.staticfiles'</span></code>：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.staticfiles.apps</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">StaticFilesConfig</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyStaticFilesConfig</span><span class=\"p\">(</span><span class=\"n\">StaticFilesConfig</span><span class=\"p\">):</span>\n    <span class=\"n\">ignore_patterns</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"o\">...</span><span class=\"p\">]</span>  <span class=\"c1\"># your custom ignore list</span>\n</code></pre></div>\n</section>\n</section>\n<section id=\"findstatic\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">findstatic</span></code><a class=\"heading-anchor\" href=\"#findstatic\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"std django-admin\">\n<dt class=\"sig sig-object std\" id=\"django-admin-findstatic\">\n<span class=\"sig-name descname\"><span class=\"pre\">django-admin</span> <span class=\"pre\">findstatic</span> <span class=\"pre\">staticfile</span> <span class=\"pre\">[staticfile</span> <span class=\"pre\">...]</span></span><a class=\"heading-anchor\" href=\"#django-admin-findstatic\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>通过启用的查找器搜索一个或多个相对路径。</p>\n<p>例如：</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>findstatic<span class=\"w\"> </span>css/base.css<span class=\"w\"> </span>admin/js/core.js\n<span class=\"go\">Found &#39;css/base.css&#39; here:</span>\n<span class=\"go\">  /home/special.polls.com/core/static/css/base.css</span>\n<span class=\"go\">  /home/polls.com/core/static/css/base.css</span>\n<span class=\"go\">Found &#39;admin/js/core.js&#39; here:</span>\n<span class=\"go\">  /home/polls.com/src/django/contrib/admin/media/js/core.js</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py findstatic css\\base.css admin\\js\\core.js\n<span class=\"go\">Found &#39;css/base.css&#39; here:</span>\n<span class=\"go\">  /home/special.polls.com/core/static/css/base.css</span>\n<span class=\"go\">  /home/polls.com/core/static/css/base.css</span>\n<span class=\"go\">Found &#39;admin/js/core.js&#39; here:</span>\n<span class=\"go\">  /home/polls.com/src/django/contrib/admin/media/js/core.js</span>\n</code></pre></div></div></div>\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-findstatic-arg-findstatic\">\n<span class=\"sig-name descname\"><span class=\"pre\">findstatic</span></span><span class=\"sig-prename descclassname\"> <span class=\"pre\">--first</span></span><a class=\"heading-anchor\" href=\"#cmdoption-findstatic-arg-findstatic\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>默认情况下，会找到所有匹配的位置。要只返回每个相对路径的第一个匹配点，请使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">--first</span></code> 选项：</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>findstatic<span class=\"w\"> </span>css/base.css<span class=\"w\"> </span>--first\n<span class=\"go\">Found &#39;css/base.css&#39; here:</span>\n<span class=\"go\">  /home/special.polls.com/core/static/css/base.css</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py findstatic css\\base.css --first\n<span class=\"go\">Found &#39;css/base.css&#39; here:</span>\n<span class=\"go\">  /home/special.polls.com/core/static/css/base.css</span>\n</code></pre></div></div></div>\n<p>这是一个调试辅助工具，它会告诉你到底哪个静态文件会被收集到一个给定的路径。</p>\n<p>通过将 <code class=\"docutils literal notranslate\"><span class=\"pre\">--verbosity</span></code> 标志设置为 0，你可以抑制额外的输出，只获取路径名：</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>findstatic<span class=\"w\"> </span>css/base.css<span class=\"w\"> </span>--verbosity<span class=\"w\"> </span><span class=\"m\">0</span>\n<span class=\"go\">/home/special.polls.com/core/static/css/base.css</span>\n<span class=\"go\">/home/polls.com/core/static/css/base.css</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py findstatic css\\base.css --verbosity 0\n<span class=\"go\">/home/special.polls.com/core/static/css/base.css</span>\n<span class=\"go\">/home/polls.com/core/static/css/base.css</span>\n</code></pre></div></div></div>\n<p>另一方面，通过将 <code class=\"docutils literal notranslate\"><span class=\"pre\">--verbosity</span></code> 标志设置为 2，可以得到所有被搜索的目录。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python<span class=\"w\"> </span>manage.py<span class=\"w\"> </span>findstatic<span class=\"w\"> </span>css/base.css<span class=\"w\"> </span>--verbosity<span class=\"w\"> </span><span class=\"m\">2</span>\n<span class=\"go\">Found &#39;css/base.css&#39; here:</span>\n<span class=\"go\">  /home/special.polls.com/core/static/css/base.css</span>\n<span class=\"go\">  /home/polls.com/core/static/css/base.css</span>\n<span class=\"go\">Looking in the following locations:</span>\n<span class=\"go\">  /home/special.polls.com/core/static</span>\n<span class=\"go\">  /home/polls.com/core/static</span>\n<span class=\"go\">  /some/other/path/static</span>\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py manage.py findstatic css\\base.css --verbosity 2\n<span class=\"go\">Found &#39;css/base.css&#39; here:</span>\n<span class=\"go\">  /home/special.polls.com/core/static/css/base.css</span>\n<span class=\"go\">  /home/polls.com/core/static/css/base.css</span>\n<span class=\"go\">Looking in the following locations:</span>\n<span class=\"go\">  /home/special.polls.com/core/static</span>\n<span class=\"go\">  /home/polls.com/core/static</span>\n<span class=\"go\">  /some/other/path/static</span>\n</code></pre></div></div></div>\n</section>\n<section id=\"runserver\">\n<span id=\"staticfiles-runserver\"></span><h3><code class=\"docutils literal notranslate\"><span class=\"pre\">runserver</span></code><a class=\"heading-anchor\" href=\"#runserver\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"std django-admin\">\n<dt class=\"sig sig-object std\">\n<span class=\"sig-name descname\"><span class=\"pre\">django-admin</span> <span class=\"pre\">runserver</span> <span class=\"pre\">[addrport]</span></span></dt>\n<dd></dd></dl>\n\n<p>如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 应用程序被 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">installed</span></code></a>，则覆盖核心 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> 命令，并增加静态文件的自动服务。文件服务不通过 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MIDDLEWARE</span></code></a> 运行。</p>\n<p>该命令增加了这些选项：</p>\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-runserver-nostatic\">\n<span class=\"sig-name descname\"><span class=\"pre\">--nostatic</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-runserver-nostatic\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">--nostatic</span></code> 选项来完全禁止使用 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/contrib/staticfiles/\"><span class=\"doc\">静态文件</span></a> 应用程序提供静态文件。只有当 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/contrib/staticfiles/\"><span class=\"doc\">静态文件</span></a> 应用在你的项目的 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 配置中时，这个选项才可用。</p>\n<p>使用实例：</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin<span class=\"w\"> </span>runserver<span class=\"w\"> </span>--nostatic\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> django-admin runserver --nostatic\n</code></pre></div></div></div>\n<dl class=\"django-admin-option\">\n<dt class=\"sig sig-object\" id=\"cmdoption-runserver-insecure\">\n<span class=\"sig-name descname\"><span class=\"pre\">--insecure</span></span><span class=\"sig-prename descclassname\"></span><a class=\"heading-anchor\" href=\"#cmdoption-runserver-insecure\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">--insecure</span></code> 选项来强制使用 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/contrib/staticfiles/\"><span class=\"doc\">静态文件</span></a> 应用服务静态文件，即使 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code>。通过使用这个选项，你承认了这样的事实，即这是 <strong>效率低下的</strong>，而且可能是 <strong>不安全的</strong>。这仅用于本地开发，<strong>不应在生产中使用</strong>，并且只有当 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/contrib/staticfiles/\"><span class=\"doc\">静态文件</span></a> 应用在你的项目的 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">INSTALLED_APPS</span></code></a> 设置中时才可用。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">--insecure</span></code> 不能与 <a class=\"reference internal\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage\" title=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code></a> 一起工作。</p>\n<p>使用实例：</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>django-admin<span class=\"w\"> </span>runserver<span class=\"w\"> </span>--insecure\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> django-admin runserver --insecure\n</code></pre></div></div></div>\n</section>\n</section>\n<section id=\"storages\">\n<span id=\"staticfiles-storages\"></span><h2>存储<a class=\"heading-anchor\" href=\"#storages\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"staticfilesstorage\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">StaticFilesStorage</span></code><a class=\"heading-anchor\" href=\"#staticfilesstorage\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.storage.StaticFilesStorage\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">storage.</span></span><span class=\"sig-name descname\"><span class=\"pre\">StaticFilesStorage</span></span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.storage.StaticFilesStorage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/files/storage/#django.core.files.storage.FileSystemStorage\" title=\"django.core.files.storage.FileSystemStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">FileSystemStorage</span></code></a> 存储后端的一个子类，分别使用 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_ROOT</span></code></a> 配置作为基础文件系统位置和 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> 配置作为基础 URL。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.storage.StaticFilesStorage.post_process\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">storage.StaticFilesStorage.</span></span><span class=\"sig-name descname\"><span class=\"pre\">post_process</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">paths</span></span></em>, <em class=\"sig-param\"><span class=\"o\"><span class=\"pre\">**</span></span><span class=\"n\"><span class=\"pre\">options</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.storage.StaticFilesStorage.post_process\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>如果这个方法定义在一个存储上，那么在每次运行后都会被 <a class=\"reference internal\" href=\"#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> 管理命令调用，并得到本地存储空间和找到的文件路径作为一个字典，以及命令行选项。它产生的元组有三个值。<code class=\"docutils literal notranslate\"><span class=\"pre\">original_path,</span> <span class=\"pre\">processed_path,</span> <span class=\"pre\">processed</span></code>。路径值是字符串，<code class=\"docutils literal notranslate\"><span class=\"pre\">processed</span></code> 是一个布尔值，表示该值是否经过后处理，如果后处理失败则表示异常。</p>\n<p><a class=\"reference internal\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage\" title=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code></a> 在幕后使用它将路径替换为它们的哈希对应物，并适当地更新缓存。</p>\n</section>\n<section id=\"manifeststaticfilesstorage\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code><a class=\"heading-anchor\" href=\"#manifeststaticfilesstorage\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">storage.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ManifestStaticFilesStorage</span></span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p><a class=\"reference internal\" href=\"#django.contrib.staticfiles.storage.StaticFilesStorage\" title=\"django.contrib.staticfiles.storage.StaticFilesStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">StaticFilesStorage</span></code></a> 存储后台的一个子类，它通过在文件名上附加文件内容的 MD5 哈希值来存储它处理的文件名。例如，文件 <code class=\"docutils literal notranslate\"><span class=\"pre\">css/styles.css</span></code> 也会被保存为 <code class=\"docutils literal notranslate\"><span class=\"pre\">css/styles.55e7cbb9ba48.css</span></code>。</p>\n<p>这个存储的目的是为了继续服务于旧文件，以防某些页面仍然引用这些文件，例如，因为它们被你或第三方代理服务器缓存了。此外，如果你想在部署的文件上应用 <a class=\"reference external\" href=\"https://developer.yahoo.com/performance/rules.html#expires\">远期失效头信息</a> ，以加快后续页面访问的加载时间，它是非常有用的。</p>\n<p>存储后端会自动将保存的文件中发现的与其他保存的文件相匹配的路径替换为缓存副本的路径（使用 <a class=\"reference internal\" href=\"#django.contrib.staticfiles.storage.StaticFilesStorage.post_process\" title=\"django.contrib.staticfiles.storage.StaticFilesStorage.post_process\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">post_process()</span></code></a> 方法）。用于查找这些路径的正则表达式（ <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles.storage.HashedFilesMixin.pattern</span></code> ）涵盖。</p>\n<ul class=\"simple\">\n<li><p>层叠样式表的 <a class=\"reference external\" href=\"https://www.w3.org/TR/CSS2/cascade.html#at-import\">&#64;import</a> 规则和 <a class=\"reference external\" href=\"https://www.w3.org/TR/CSS2/syndata.html#uri\">url()</a> 语句。</p></li>\n<li><p>CSS 和 JavaScript 文件中的 <a class=\"reference external\" href=\"https://firefox-source-docs.mozilla.org/devtools-user/debugger/how_to/use_a_source_map/\">源映射 (source map)</a> 注释。</p></li>\n</ul>\n<p>如果您想要使用实验性的正则表达式来覆盖，可以子类化 <code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code> 并将 <code class=\"docutils literal notranslate\"><span class=\"pre\">support_js_module_import_aggregation</span></code> 属性设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>：</p>\n<ul class=\"simple\">\n<li><p>JavaScript 中的 <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#importing_features_into_your_script\">模块导入 (modules import)</a>。</p></li>\n<li><p>JavaScript 中的 <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#aggregating_modules\">模块聚合 (modules aggregation)</a>。</p></li>\n</ul>\n<p>例如，<code class=\"docutils literal notranslate\"><span class=\"pre\">'css/styles.css'</span></code> 文件有这样的内容：</p>\n<div class=\"code-block\" data-language=\"css\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Css</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Css code\"><code><span class=\"p\">@</span><span class=\"k\">import</span><span class=\"w\"> </span><span class=\"nt\">url</span><span class=\"o\">(</span><span class=\"s2\">&quot;../admin/css/base.css&quot;</span><span class=\"o\">)</span><span class=\"p\">;</span>\n</code></pre></div>\n<p>...将通过调用 <code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code> 存储后端的 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/files/storage/#django.core.files.storage.Storage.url\" title=\"django.core.files.storage.Storage.url\"><code class=\"xref py py-meth docutils literal notranslate\"><span class=\"pre\">url()</span></code></a> 方法来替代，最终保存一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">css/styles.55e7cbb9ba48.css</span></code> 文件，内容如下：</p>\n<div class=\"code-block\" data-language=\"css\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Css</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Css code\"><code><span class=\"p\">@</span><span class=\"k\">import</span><span class=\"w\"> </span><span class=\"nt\">url</span><span class=\"o\">(</span><span class=\"s2\">&quot;../admin/css/base.27e20196a850.css&quot;</span><span class=\"o\">)</span><span class=\"p\">;</span>\n</code></pre></div>\n<aside class=\"admonition-usage-of-the-integrity-html-attribute-with-local-files admonition\">\n<p class=\"admonition-title\">使用 <code class=\"docutils literal notranslate\"><span class=\"pre\">integrity</span></code> HTML属性与本地文件</p>\n<p>在使用类似于 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;script&gt;</span></code> 或 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;link&gt;</span></code> 这样的标签时，如果使用了可选的 <code class=\"docutils literal notranslate\"><span class=\"pre\">integrity</span></code> 属性，其值应该基于文件在提供时的状态进行计算，而不是文件系统中的存储状态。这一点尤其重要，因为静态文件的收集方式不同，它们的校验和可能会发生变化（例如使用 <a class=\"reference internal\" href=\"#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> 时）。目前，还没有针对这一问题提供现成工具。</p>\n</aside>\n<p>您可以通过使用自定义的 <code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code> 子类，设置 <code class=\"docutils literal notranslate\"><span class=\"pre\">manifest_storage</span></code> 参数来改变清单文件的位置。例如：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.staticfiles.storage</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"p\">(</span>\n    <span class=\"n\">ManifestStaticFilesStorage</span><span class=\"p\">,</span>\n    <span class=\"n\">StaticFilesStorage</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MyManifestStaticFilesStorage</span><span class=\"p\">(</span><span class=\"n\">ManifestStaticFilesStorage</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">manifest_storage</span> <span class=\"o\">=</span> <span class=\"n\">StaticFilesStorage</span><span class=\"p\">(</span><span class=\"n\">location</span><span class=\"o\">=</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">BASE_DIR</span><span class=\"p\">)</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">manifest_storage</span><span class=\"o\">=</span><span class=\"n\">manifest_storage</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition-references-in-comments admonition\">\n<p class=\"admonition-title\">注释中的引用</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code> 在注释掉的语句中不会忽略路径。这 <a class=\"extlink-ticket reference external\" href=\"https://code.djangoproject.com/ticket/21080\">可能会在不存在的路径上导致崩溃</a>。你应该检查并最终删除注释。</p>\n</aside>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_hash\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">storage.ManifestStaticFilesStorage.</span></span><span class=\"sig-name descname\"><span class=\"pre\">manifest_hash</span></span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_hash\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>这个属性提供了一个单一的哈希值，每当清单中的文件发生变化时都会发生变化。这可以用来向单页应用（SPA）通知服务器上的资源已经发生了变化（例如由于新的部署）。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage.max_post_process_passes\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">storage.ManifestStaticFilesStorage.</span></span><span class=\"sig-name descname\"><span class=\"pre\">max_post_process_passes</span></span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.max_post_process_passes\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>由于静态文件可能会引用其他需要替换路径的静态文件，因此可能需要多次替换路径，直到文件哈希值收敛。为了防止由于哈希值不收敛而导致无限循环（例如，如果 <code class=\"docutils literal notranslate\"><span class=\"pre\">'foo.css'</span></code> 引用 <code class=\"docutils literal notranslate\"><span class=\"pre\">'bar.css'</span></code>，而后者引用 <code class=\"docutils literal notranslate\"><span class=\"pre\">'foo.css'</span></code>），在放弃后处理之前有一个最大的传递次数。在引用数量较多的情况下，可能需要更多的传递次数。通过子类 <code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code> 并设置 <code class=\"docutils literal notranslate\"><span class=\"pre\">max_post_process_passes</span></code> 属性来增加最大传递次数。默认值为 5。</p>\n<p>要启用 <code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code>，你必须确保满足以下要求：</p>\n<ul class=\"simple\">\n<li><p>在 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a> 设置中，<code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 存储后端被设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'</span></code>。</p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code></p></li>\n<li><p>通过使用 <a class=\"reference internal\" href=\"#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> 管理命令，你已经收集了所有静态文件</p></li>\n</ul>\n<p>由于在运行时创建 MD5 哈希可能会给网站带来性能负担，<code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 会自动将所有处理过的文件的哈希名映射存储在一个名为 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles.json</span></code> 的文件中。当你运行 <a class=\"reference internal\" href=\"#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a> 管理命令时就会发生一次。</p>\n<dl class=\"py attribute\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_strict\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">storage.ManifestStaticFilesStorage.</span></span><span class=\"sig-name descname\"><span class=\"pre\">manifest_strict</span></span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.manifest_strict\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>如果在运行时在 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles.json</span></code> 清单中没有找到文件，就会引发 <code class=\"docutils literal notranslate\"><span class=\"pre\">ValueError</span></code>。这种行为可以通过子类 <code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code> 并将 <code class=\"docutils literal notranslate\"><span class=\"pre\">manifest_strict</span></code> 属性设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">False</span></code> 来禁止，不存在的路径将保持不变。</p>\n<p>由于需要运行 <a class=\"reference internal\" href=\"#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a>，在运行测试时通常不应使用这个存储后端，因为 <code class=\"docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code> 不会作为正常测试设置的一部分运行。在测试期间，确保在 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a> 设置中，<code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 存储后端被设置为其他值，比如 <code class=\"docutils literal notranslate\"><span class=\"pre\">'django.contrib.staticfiles.storage.StaticFilesStorage'</span></code> （默认值）。</p>\n<dl class=\"py method\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage.file_hash\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">storage.ManifestStaticFilesStorage.</span></span><span class=\"sig-name descname\"><span class=\"pre\">file_hash</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">name</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">content</span></span><span class=\"o\"><span class=\"pre\">=</span></span><span class=\"default_value\"><span class=\"pre\">None</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage.file_hash\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>创建文件的哈希名时使用的方法。需要返回给定文件名和内容的哈希值。默认情况下，它从上面提到的内容块中计算出一个 MD5 哈希。可以随意覆盖这个方法，使用自己的哈希算法。</p>\n</section>\n<section id=\"manifestfilesmixin\">\n<h3><code class=\"docutils literal notranslate\"><span class=\"pre\">ManifestFilesMixin</span></code><a class=\"heading-anchor\" href=\"#manifestfilesmixin\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.storage.ManifestFilesMixin\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">storage.</span></span><span class=\"sig-name descname\"><span class=\"pre\">ManifestFilesMixin</span></span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.storage.ManifestFilesMixin\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>使用这个混入和一个自定义的存储来附加文件内容的 MD5 哈希到文件名中，就像 <a class=\"reference internal\" href=\"#django.contrib.staticfiles.storage.ManifestStaticFilesStorage\" title=\"django.contrib.staticfiles.storage.ManifestStaticFilesStorage\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">ManifestStaticFilesStorage</span></code></a> 那样。</p>\n</section>\n</section>\n<section id=\"finders-module\">\n<h2>查找器模块<a class=\"heading-anchor\" href=\"#finders-module\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 查找器有一个 <code class=\"docutils literal notranslate\"><span class=\"pre\">searched_locations</span></code> 属性，是查找器搜索的目录路径列表。使用示例：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.staticfiles</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">finders</span>\n\n<span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">finders</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"s2\">&quot;css/base.css&quot;</span><span class=\"p\">)</span>\n<span class=\"n\">searched_locations</span> <span class=\"o\">=</span> <span class=\"n\">finders</span><span class=\"o\">.</span><span class=\"n\">searched_locations</span>\n</code></pre></div>\n</section>\n<section id=\"other-helpers\">\n<h2>其他辅助功能<a class=\"heading-anchor\" href=\"#other-helpers\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>在 <a class=\"reference internal\" href=\"#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code></a> 应用程序之外，还有一些其他的辅助功能来处理静态文件。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/templates/api/#django.template.context_processors.static\" title=\"django.template.context_processors.static\"><code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.template.context_processors.static()</span></code></a> 上下文处理器，它为每个用  <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/templates/api/#django.template.RequestContext\" title=\"django.template.RequestContext\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">RequestContext</span></code></a> 上下文渲染的模板上下文添加 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a>。</p></li>\n<li><p>内置模板标签 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/templates/builtins/#std-templatetag-static\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">static</span></code></a> 接受一个路径，并将其与静态前缀 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> 进行 URL 连接。如果安装了 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code>，该标签将使用来自 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STORAGES\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STORAGES</span></code></a> 的 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 存储后端的 <code class=\"docutils literal notranslate\"><span class=\"pre\">url()</span></code> 方法。</p></li>\n<li><p>内置的模板标签 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/templates/builtins/#std-templatetag-get_static_prefix\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">get_static_prefix</span></code></a>，将静态前缀 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> 填充到模板变量中，作为变量或直接使用。</p></li>\n<li><p>类似的模板标签 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/templates/builtins/#std-templatetag-get_media_prefix\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">get_media_prefix</span></code></a>，其工作原理与 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/templates/builtins/#std-templatetag-get_static_prefix\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">get_static_prefix</span></code></a> 类似，但使用 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">MEDIA_URL</span></code></a>。</p></li>\n<li><p><a class=\"reference internal\" href=\"/zh-hans/5.1/ref/files/storage/#django.core.files.storage.storages\" title=\"django.core.files.storage.storages\"><code class=\"xref py py-data docutils literal notranslate\"><span class=\"pre\">django.core.files.storage.storages</span></code></a> 中的 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 键包含一个已准备好的 staticfiles 存储后端的实例。</p></li>\n</ul>\n<section id=\"static-file-development-view\">\n<span id=\"staticfiles-development-view\"></span><h3>静态文件开发视图<a class=\"heading-anchor\" href=\"#static-file-development-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>静态文件工具主要是为了帮助将静态文件成功部署到生产中。这通常意味着一个单独的、专用的静态文件服务器，这在本地开发时是一个很大的开销。因此，<code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 应用程序中附带了一个 <strong>快速和肮脏的辅助视图</strong>，你可以在开发中使用它在本地服务文件。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.views.serve\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">views.</span></span><span class=\"sig-name descname\"><span class=\"pre\">serve</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">request</span></span></em>, <em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">path</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.views.serve\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>该视图功能服务于开发中的静态文件。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>只有当 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code> 时，该视图才会生效。</p>\n<p>这是因为这个视图的 <strong>效率很低</strong>，而且可能 <strong>不安全</strong>。这只用于本地开发，<strong>不应该用于生产</strong>。</p>\n</aside>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Note</p>\n<p>为了猜测服务文件的内容类型，这个视图依赖于 Python 标准库中的 <a class=\"reference external\" href=\"https://docs.python.org/3/library/mimetypes.html#module-mimetypes\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\"><span class=\"pre\">mimetypes</span></code></a> 模块，它本身依赖于底层平台的映射文件。如果你发现这个视图没有为某些文件返回正确的内容类型，很可能是平台的映射文件不正确或者需要更新。例如，可以通过安装或更新 Red Hat 发行版上的 <code class=\"docutils literal notranslate\"><span class=\"pre\">mailcap</span></code> 包、Debian 发行版上的 <code class=\"docutils literal notranslate\"><span class=\"pre\">mime-support</span></code>，或编辑 Windows 注册表中 <code class=\"docutils literal notranslate\"><span class=\"pre\">HKEY_CLASSES_ROOT</span></code> 下的键来实现。</p>\n</aside>\n<p>该视图由 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/django-admin/#django-admin-runserver\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">runserver</span></code></a> 自动启用（将 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 设置为 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>）。要在不同的本地开发服务器上使用该视图，请在主 URL 配置的结尾添加以下代码段：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.conf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.staticfiles</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">views</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">re_path</span>\n\n<span class=\"k\">if</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DEBUG</span><span class=\"p\">:</span>\n    <span class=\"n\">urlpatterns</span> <span class=\"o\">+=</span> <span class=\"p\">[</span>\n        <span class=\"n\">re_path</span><span class=\"p\">(</span><span class=\"sa\">r</span><span class=\"s2\">&quot;^static/(?P&lt;path&gt;.*)$&quot;</span><span class=\"p\">,</span> <span class=\"n\">views</span><span class=\"o\">.</span><span class=\"n\">serve</span><span class=\"p\">),</span>\n    <span class=\"p\">]</span>\n</code></pre></div>\n<p>注意，模式的开头（<code class=\"docutils literal notranslate\"><span class=\"pre\">r'^static/'</span></code>）应该是你的 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> 配置。</p>\n<p>因为这个有点细，所以还有一个辅助功能可以帮你完成这个任务：</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.urls.staticfiles_urlpatterns\">\n<span class=\"sig-prename descclassname\"><span class=\"pre\">urls.</span></span><span class=\"sig-name descname\"><span class=\"pre\">staticfiles_urlpatterns</span></span><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.urls.staticfiles_urlpatterns\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>这将返回适当的 URL 模式，用于向你已经定义的模式列表提供静态文件。像这样使用它：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.contrib.staticfiles.urls</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">staticfiles_urlpatterns</span>\n\n<span class=\"c1\"># ... the rest of your URLconf here ...</span>\n\n<span class=\"n\">urlpatterns</span> <span class=\"o\">+=</span> <span class=\"n\">staticfiles_urlpatterns</span><span class=\"p\">()</span>\n</code></pre></div>\n<p>这将检查你的 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> 配置，并相应地给视图设置静态文件。不要忘记设置 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATICFILES_DIRS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATICFILES_DIRS</span></code></a> 配置，让 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles</span></code> 知道除了应用程序目录中的文件外，还可以在哪里查找文件。</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Warning</p>\n<p>只有当 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-DEBUG\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">DEBUG</span></code></a> 是 <code class=\"docutils literal notranslate\"><span class=\"pre\">True</span></code>，并且你的 <a class=\"reference internal\" href=\"/zh-hans/5.1/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">STATIC_URL</span></code></a> 的配置既不是空的，也不是完整的 URL，比如 <code class=\"docutils literal notranslate\"><span class=\"pre\">http://static.example.com/</span></code>，这个辅助函数才会起作用。</p>\n<p>这是因为这个视图的 <strong>效率很低</strong>，而且可能 <strong>不安全</strong>。这只用于本地开发，<strong>不应该用于生产</strong>。</p>\n</aside>\n</section>\n<section id=\"specialized-test-case-to-support-live-testing\">\n<h3>支持“实时测试”的专门测试案例<a class=\"heading-anchor\" href=\"#specialized-test-case-to-support-live-testing\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.staticfiles.testing.StaticLiveServerTestCase\">\n<em class=\"property\"><span class=\"k\"><span class=\"pre\">class</span></span><span class=\"w\"> </span></em><span class=\"sig-prename descclassname\"><span class=\"pre\">testing.</span></span><span class=\"sig-name descname\"><span class=\"pre\">StaticLiveServerTestCase</span></span><a class=\"heading-anchor\" href=\"#django.contrib.staticfiles.testing.StaticLiveServerTestCase\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd></dd></dl>\n\n<p>这个 untest TestCase 子类扩展了 <a class=\"reference internal\" href=\"/zh-hans/5.1/topics/testing/tools/#django.test.LiveServerTestCase\" title=\"django.test.LiveServerTestCase\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">django.test.LiveServerTestCase</span></code></a>。</p>\n<p>就像它的父类一样，你可以用它来编写测试，涉及到运行被测代码，并通过 HTTP 与测试工具（如 Selenium、PhantomJS 等）进行消费，因为这需要静态资产也被发布。</p>\n<p>但是由于它使用了上面描述的 <code class=\"xref py py-func docutils literal notranslate\"><span class=\"pre\">django.contrib.staticfiles.views.service()</span></code> 视图，它可以在测试执行时透明地叠加 <code class=\"docutils literal notranslate\"><span class=\"pre\">staticfiles</span></code> 查找器提供的资产。这意味着你不需要在测试配置之前或作为测试配置的一部分运行 <a class=\"reference internal\" href=\"#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\"><span class=\"pre\">collectstatic</span></code></a>。</p>\n</section>\n</section>","rootId":"module-django.contrib.staticfiles","toc":[{"title":"配置","anchor":"settings","children":[]},{"title":"管理命令","anchor":"management-commands","children":[{"title":"collectstatic","anchor":"collectstatic","children":[{"title":"自定义忽略的模式列表","anchor":"customizing-the-ignored-pattern-list","children":[]}]},{"title":"findstatic","anchor":"findstatic","children":[]},{"title":"runserver","anchor":"runserver","children":[]}]},{"title":"存储","anchor":"storages","children":[{"title":"StaticFilesStorage","anchor":"staticfilesstorage","children":[]},{"title":"ManifestStaticFilesStorage","anchor":"manifeststaticfilesstorage","children":[]},{"title":"ManifestFilesMixin","anchor":"manifestfilesmixin","children":[]}]},{"title":"查找器模块","anchor":"finders-module","children":[]},{"title":"其他辅助功能","anchor":"other-helpers","children":[{"title":"静态文件开发视图","anchor":"static-file-development-view","children":[]},{"title":"支持“实时测试”的专门测试案例","anchor":"specialized-test-case-to-support-live-testing","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/5.1/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/5.1/ref/contrib/"}],"prev":{"docname":"ref/contrib/sites","title":"“站点”框架","url":"/zh-hans/5.1/ref/contrib/sites/"},"next":{"docname":"ref/contrib/syndication","title":"Feed 聚合框架","url":"/zh-hans/5.1/ref/contrib/syndication/"},"formats":{"html":"/zh-hans/5.1/ref/contrib/staticfiles/","markdown":"/zh-hans/5.1/ref/contrib/staticfiles.md","json":"/zh-hans/5.1/ref/contrib/staticfiles.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/ref/contrib/staticfiles.txt","official":"https://docs.djangoproject.com/zh-hans/5.1/ref/contrib/staticfiles/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}