基于 Django1.10 文档的深入学习(28)—— Managing static files(e.g. images, JavaScript, CSS)
来源:互联网 发布:魔术师约翰逊生涯数据 编辑:程序博客网 时间:2024/06/05 21:04
Managing static files (e.g. images, JavaScript, CSS)
网站通常需要提供其他文件,如图像,JavaScript
或CSS
。 在Django中,我们将这些文件称为“静态文件”。 Django提供django.contrib.staticfiles
来帮助您管理它们。
本页介绍如何提供这些静态文件。
Configuring static files配置静态文件
- 确保您的
INSTALLED_APPS
中包含django.contrib.staticfiles
。 - 在您的设置文件中,定义
STATIC_URL
,例如:
STATIC_URL = '/static/'
- 在您的模板中,您可以对网址进行硬编码,如
/static/my_app/example.jpg
,或者最好使用静态模板标签通过使用已配置的STATICFILES_STORAGE
存储来构建给定相对路径的URL
切换到用于提供静态文件的内容传送网络(CDN))。
{% load static %}<img src="{% static "my_app/example.jpg" %}" alt="My image"/>
- 将静态文件存储在应用程序中的静态文件夹中。 例如
my_app / static / my_app / example.jpg
。
提供文件
除了这些配置步骤之外,您还需要实际提供静态文件。
在开发过程中,如果使用
django.contrib.staticfiles
,当DEBUG
设置为True
时,这将由runserver
自动完成(请参阅django.contrib.staticfiles.views.serve()
)。这种方法是非常低效的,可能是不安全的,所以它不适合生产。
请参阅部署静态文件以获得正确的策略,以便在生产环境中提供静态文件。
您的项目可能还将具有与特定应用程序无关的静态资产。 除了在应用程序中使用静态/目录之外,还可以在设置文件中定义一个目录列表(STATICFILES_DIRS)
,Django
还将查找静态文件。 例如:
STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static"), '/var/www/static/',]
静态文件命名空间
现在我们可以将静态文件直接放在
my_app / static /
(而不是创建另一个my_app
子目录)中,但这实际上是一个坏主意。
Django将使用它找到的名称匹配的第一个静态文件,如果在其他应用程序中有一个具有相同名称的静态文件,Django将无法区分它们。
我们需要能够将Django指向正确的方法,最简单的方法是通过命名来确定这一点。也就是说,将这些静态文件放在为应用程序本身命名的另一个目录中。
Serving static files during development在开发过程中提供静态文件
如果您使用django.contrib.staticfiles
,如上所述,当DEBUG
设置为True
时,runserver
将自动执行此操作。 如果在INSTALLED_APPS
中没有django.contrib.static
文件,您仍然可以使用django.contrib.staticfiles.views.serve()
视图手动提供静态文件。
这不适合生产使用! 有关常见的部署策略,请参阅部署静态文件。
例如,如果您的STATIC_URL
定义为/ static /
,可以通过将以下代码片段添加到urls.py
来实现:
from django.conf import settingsfrom django.conf.urls.static import staticurlpatterns = [ # ... 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.contrib.staticfiles.views.serve()
视图从MEDIA_ROOT
提供用户上传的媒体文件。
这不适合生产使用! 有关常见的部署策略,请参阅部署静态文件。
例如,如果您的MEDIA_URL
定义为/ media /
,可以通过将以下代码片段添加到urls.py
中来实现:
from django.conf import settingsfrom django.conf.urls.static import staticurlpatterns = [ # ... the rest of your URLconf goes here ...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
注意
此帮助函数仅在调试模式下工作,并且仅在给定前缀是本地(例如
/ 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
提供了一个方便的管理命令,用于在单个目录中收集静态文件,以便您轻松地为其提供服务。
将STATIC_ROOT
设置设置为要从中提供这些文件的目录,例如:
STATIC_ROOT =“/var/www/example.com/static/”
运行collectstatic
管理命令:
$ python manage.py collectstatic
这将将所有文件从静态文件夹复制到STATIC_ROOT
目录中。
使用您选择的Web服务器来提供文件。 部署静态文件涵盖了静态文件的一些常见部署策略。
- 基于 Django1.10 文档的深入学习(28)—— Managing static files(e.g. images, JavaScript, CSS)
- 基于 Django1.10 文档的深入学习(27)—— django.conf.urls utility functions 之 url(),include(),static()
- 基于 Django1.10 文档的深入学习(29)——Built-in Views 之 static.serve()
- 基于 Django1.10 文档的深入学习(2)—— Settings.py 之 STATIC_*
- 基于 Django1.10 文档的深入学习(3)—— models.py 之 FileField
- 基于 Django1.10 文档的深入学习(4)—— models.py 之 class Meta
- 基于 Django1.10 文档的深入学习(5)—— Making queries 之 FOO_set
- 基于 Django1.10 文档的深入学习(6)—— Translation 之 short_description
- 基于 Django1.10 文档的深入学习(7)—— Configuring applications
- 基于 Django1.10 文档的深入学习(8)—— Model field reference 之 choices
- 基于 Django1.10 文档的深入学习(9)—— Extra instance methods 之 get_FOO_display()
- 基于 Django1.10 文档的深入学习(11)—— django.shortcuts 之 render()
- 基于 Django1.10 文档的深入学习(12)—— django.shortcuts 之 redirect()
- 基于 Django1.10 文档的深入学习(13)—— django.core.urlresolvers 之 reverse()
- 基于 Django1.10 文档的深入学习(13)—— Making queries 之 Q objects
- 基于 Django1.10 文档的深入学习(15)——django.contrib.auth.hashers
- 基于 Django1.10 文档的深入学习(16)——Authentication backends 之 class ModelBackend
- 基于 Django1.10 文档的深入学习(19)——Working with forms
- js时间戳、毫秒格式化
- Difference between Stack.capacity() and Stack.size()
- 数据结构—单链表
- 随手记录--xml in java
- BZOJ 1079 [SCOI2008] 着色方案
- 基于 Django1.10 文档的深入学习(28)—— Managing static files(e.g. images, JavaScript, CSS)
- 【C语言训练】委派任务
- Flask 使用消息闪烁(flash)报错
- 编写java程序151条建议读书笔记(6)
- js瀑布流
- 随手记录--java排序(1)冒泡、选择、希尔、归并
- 移植2013Uboot启动信息如下:有些是自己添加的:仅供参考
- hbase中java中API
- 随手记录--python基础知识