Django 静态文件

管理静态文件 (如 images, JavaScript, CSS)

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

配置静态文件

1.保证django.contrib.staticfiles 在INSTALLED_APPS中。
2.在你的配置文件中,定义 STATIC_URL ,例如:

STATIC_URL = '/static/'
  1. 在你的模板中,使用static 模板标签去创建url 给相对的路径通过使用配置STATIC_URL = ‘/static/’
{% load static %}
<img src="{% static "my_app/example.jpg" %}" alt="My image">
  1. 存储你的静态文件在一个文件夹中称为static 在你的app中。举个例子:my_app/static/my_app/example.jpg.

除了这些配置步骤之外,还需要实际提供静态文件。
在你的开发过程中,如果你使用了 django.contrib.staticfiles, 那么它会自动被调用当你使用runserver,而且DEBUG设置为True的时候。
这种方法效率非常低,而且可能不安全,因此不适合生产。
有关在生产环境中为静态文件提供服务的正确策略,请参阅部署静态文件。

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

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
]

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

在开发过程中提供静态文件
如果你使用django.contrib。如上所述,当调试设置为True时,runserver将自动执行此操作。如果你没有django.contrib。在INSTALLED_APPS中,仍然可以使用django.views.static.serve()视图手动提供静态文件。

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

例如,如果您的STATIC_URL被定义为/static/,您可以通过将以下代码片段添加到您的url .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)

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

提供用户在开发过程中上载的文件

在开发期间,您可以使用django.views.static. service()视图从MEDIA_ROOT提供用户上传的媒体文件。
这是不适合生产使用的!有关一些常见的部署策略,请参阅部署静态文件。
例如,如果您的MEDIA_URL被定义为/media/,您可以通过将以下代码片段添加到您的url .py中来实现这一点:

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)

注意:
这个helper 函数 只能用于调试模式和只有给出的本地前缀是(e.g. /media/) 而且不是一个 URL (e.g. http://media.example.com/).

测试

运行测试时,使用实际的HTTP请求而不是内置的测试客户端(即当使用内置的LiveServerTestCase)静态资产需要服务以及其他内容的测试环境尽可能忠实地再现了真实的一个,但LiveServerTestCase只有非常基本的静态文件服务功能:它不知道staticfiles应用程序的finders特性,并假设静态内容已经在STATIC_ROOT下收集。
正因为如此,staticfiles提供了它自己django.contrib.staticfiles.testing.StaticLiveServerTestCase,是内置类的一个子类,它能够在执行这些测试时透明地提供所有资产,其方式与我们在开发时使用DEBUG = True时得到的方式非常相似,即无需首先使用collectstatic收集它们。

部署

django.contrib.staticfiles 提供一个方便的管理命令对于收集静态文件在一个单一文件下可以很好的利用它们。

  1. 设置STATIC_ROOT在你想要使用的目录下:
STATIC_ROOT = "/var/www/example.com/static/"
  1. 运行collectstatic 管理命令:
$ python manage.py collectstatic

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

  1. 使用一个web服务器选择你要使用的文件。部署静态文件会覆盖掉一些本来用于静态文件部署的策略。

MEDIA 和STATIC 配置项的区别

MEDIA 配置项用来管理媒体文件,经常由FileFields字段上传。保存在settings.MEDIA_ROOT目录下,通过settings.MEDIA_URL路径来访问。
管理静态文件。使用collectstatic命令。
settings.STATIC_ROOT目录,通过settings.STATIC_URL指令的路径访问。

配置项

  1. STATIC_ROOT 配置项:方便于调试,托管静态资源。
  2. STATIC_URL 配置项:STATIC_URL = ‘/static/’
  3. ADMIN_MEDIA_PREFIX 配置项,以便staticfiles能够正确找到django.contrib.admin的静态资源:ADMIN_MEDIA_PREFIX = STATIC_URL + ‘admin/’
    在模板中使用

开发环境

1、新建项目lxyproject
[root@yl-web srv]# django-admin.py startproject lxyproject
2、在项目中新建一个app名叫hello

[root@yl-web lxyproject]# python manage.py startapp hello
[root@yl-web lxyproject]# ls
hello lxyproject manage.py
在hello app下建一个static目录用来存放静态文件。

[root@yl-web hello]# mkdir static
[root@yl-web hello]# ls
init.py models.py static tests.py views.py
然后在static目录新建一个hello.txt的静态文件。

[root@yl-web hello]# cd static/
[root@yl-web static]# ls
hello.txt
[root@yl-web static]# cat hello.txt
hello.txt’s content:congratulations!!
3、在项目的settings.py文件中INSTALLED_APPS中配置hello app

INSTALLED_APPS = (

‘hello’,
)
4、运行项目

[root@yl-web lxyproject]# python manage.py runserver 0.0.0.0:9000

生产环境中

STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
)
  1. 配置服务器
  2. 在项目根目录下创建collectedstatic目录。
  3. 配置settings.py
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值