【Django】静态文件

Managing static files (e.g. images, JavaScript, CSS)

网站通常需要提供其他文件,例如图像、JavaScript 或 CSS。 在 Django 中,我们将这些文件称为“静态文件”。 Django 提供 django.contrib.staticfiles 来帮助您管理它们。

此页面描述了如何提供这些静态文件。

Configuring static files

Make sure that django.contrib.staticfiles is included in your INSTALLED_APPS.
在这里插入图片描述

In your settings file, define STATIC_URL, for example:

STATIC_URL = '/static/'

In your templates, use the static template tag to build the URL for the given relative path using the configured STATICFILES_STORAGE.

{% load static %}
<img src="{% static 'my_app/example.jpg' %}" alt="My image">

在这里插入图片描述

Store your static files in a folder called static in your app. For example my_app/static/my_app/example.jpg.

在这里插入图片描述

提供文件
除了这些配置步骤之外,您还需要实际提供静态文件。
在开发过程中,如果您使用django.contrib.staticfiles,这将runserver在DEBUG设置为True(参见django.contrib.staticfiles.views.serve())时自动完成。
这种方法效率极低,而且可能不安全,因此不适用于生产

您的项目可能还有与特定应用程序无关的静态资产。除了static/在应用程序中使用目录之外,您还可以STATICFILES_DIRS在设置文件中定义目录列表 ( ),Django 还将在其中查找静态文件。例如:

STATICFILES_DIRS = [
    BASE_DIR / "static",
    '/var/www/static/',
]

有关STATICFILES_FINDERS如何staticfiles查找文件的详细信息,请参阅设置文档。

静态文件命名空间
现在我们或许可以将我们的静态文件直接放入my_app/static/(而不是创建另一个my_app 子目录),但这实际上是一个坏主意。Django 将使用它找到的第一个名称匹配的静态文件,如果您在不同的应用程序中有一个同名的静态文件,Django 将无法区分它们。我们需要能够将 Django 指向正确的位置,而确保这一点的最佳方法是对它们进行命名空间。也就是说,通过将这些静态文件放在另一个以应用程序本身命名的目录中
您可以STATICFILES_DIRS通过指定prefixes来命名静态资产。

Serving static files during development

如果您django.contrib.staticfiles按上述说明使用, runserver则在DEBUG设置为True时会自动执行此操作。如果您在 INSTALLED_APPS 中没有 django.contrib.staticfiles,您仍然可以使用 django.views.static.serve() 视图手动提供静态文件。

这不适合生产使用!有关一些常见的部署策略,请参阅部署静态文件

例如,如果您STATIC_URL的定义为/static/,您可以通过将以下代码段添加到您的 urls.py 来实现:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

此辅助函数仅在调试模式下有效,并且仅当给定的前缀是本地前缀(例如 /static/)而不是 URL(例如 http://static.example.com/)时。
此外,此辅助函数仅服务于实际的 STATIC_ROOT 文件夹; 它不会像 django.contrib.staticfiles 那样执行静态文件发现。

Serving files uploaded by a user during development

在开发过程中提供用户上传的文件
在开发过程中,您可以使用 django.views.static.serve() 视图从 MEDIA_ROOT 提供用户上传的媒体文件。

这不适合生产使用! 有关一些常见的部署策略,请参阅部署静态文件。

例如,如果您的 MEDIA_URL 定义为 /media/,您可以通过将以下代码段添加到 ROOT_URLCONF 来实现:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

此辅助函数仅在debug模式下工作,并且仅当给定的前缀是本地的(例如/media/)而不是 URL(例如 http://media.example.com/)。

Testing

当运行使用实际 HTTP 请求而不是内置测试客户端的测试时(即使用内置 LiveServerTestCase 时),静态资产需要与其余内容一起提供,以便测试环境忠实地再现真实的内容 可能,但 LiveServerTestCase 只有非常基本的静态文件服务功能:它不知道 staticfiles 应用程序的查找程序功能,并假设静态内容已经在 STATIC_ROOT 下收集。

因此,staticfiles 提供了自己的 django.contrib.staticfiles.testing.StaticLiveServerTestCase,它是内置的子类,能够在执行这些测试的过程中以一种非常类似于我们得到的方式透明地提供所有资产 在开发时使用 DEBUG = True,即不必先使用 collectstatic 收集它们。

Deployment

部署
django.contrib.staticfiles 提供了一个方便的管理命令,用于在单个目录中收集静态文件,以便您可以轻松地为它们提供服务。

  • 1.将 STATIC_ROOT 设置设置为您想要提供这些文件的目录,例如:
STATIC_ROOT = "/var/www/example.com/static/"
$ python manage.py collectstatic

这会将静态文件夹中的所有文件复制到 STATIC_ROOT 目录中。

  • 3.使用您选择的 Web 服务器来提供文件。 部署静态文件涵盖了一些常见的静态文件部署策略。

learn more

本文档涵盖了基础知识和一些常见的使用模式。 有关 django.contrib.staticfiles 中包含的所有设置、命令、模板标签和其他部分的完整详细信息,请参阅 staticfiles 参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值