{% load static %} 和 {% load staticfiles %}:哪个更好?
{% load static %} and {% load staticfiles %}: which is preferred?
我不确定有什么区别,看起来它们都在工作。我在谷歌上搜索了一下,似乎它们几乎是同一回事。
出于好奇,人们在现场使用哪一个?
我读了那个,但仍然不知道什么时候使用哪个,以及该领域的人使用哪个。我的作品适用于他们两个。起初我以为它正在加载静态文件夹,但它也适用于静态文件... –
目前(Django 1.9 及更早版本),{% load staticfiles %}
从 contrib 应用程序加载 static
模板标签,该应用程序比内置 django.core.static
.[=31] 具有更多功能=]
最重要的区别是 staticfiles
可以管理存储在 CDN 上的文件,因为它的解析器可以管理哈希等。 core.static
仅将 STATIC_URL
附加到静态文件名,如果您正在处理文件(例如添加 md5 哈希以清除版本之间的缓存),这还不够
这种差异是因为管理非本地存储文件并没有专门包含在 Django 的核心包中,但作为官方贡献包实现对许多开发人员来说仍然有用。所以如果你开始使用 staticfiles
,你必须记住在你的模板中使用它。但是,可能会出现一些问题,例如当 using Media
classes 时,所以决定将这两个模板标签合并为一个并使用不同的行为,无论开发人员是否在其 INSTALLED_APPS
中包含 django.contrib.staticfiles
.
从 Django 1.10 and onwards (also see ticket in Django tracker),{% load static %}
将在内部使用 staticfiles
如果激活 (否则保持默认行为),并且contrib 包中的 templatetag 将被弃用以避免混淆。
TL;DR
- 在 Django 1.10 之前:
staticfiles
加载一个可以管理非本地存储的模板标签,而 static
不能(或不容易);
- 从 Django 1.10:
contrib.staticfiles
应用程序仍然存在,但其模板标签将被删除,只有 {% static %}
模板标签保留;
- 从 Django 2.0(我相信):
{% load staticfiles %}
已删除。
在 Django 1.10 之前,如果您使用相关的 contrib 应用程序(并且您知道为什么要使用它),请使用 staticfiles
templatetags,否则只需使用 static
.
'django/contrib/staticfiles/templatetags/staticfiles.py' 中关于这个主题的一段有趣的代码:
import warnings
from django import template
from django.templatetags.static import (
do_static as _do_static, static as _static,
)
from django.utils.deprecation import RemovedInDjango30Warning
register = template.Library()
def static(path):
warnings.warn(
'django.contrib.staticfiles.templatetags.static() is deprecated in '
'favor of django.templatetags.static.static().',
RemovedInDjango30Warning,
stacklevel=2,
)
return _static(path)
@register.tag('static')
def do_static(parser, token):
warnings.warn(
'{% load staticfiles %} is deprecated in favor of {% load static %}.',
RemovedInDjango30Warning,
)
return _do_static(parser, token)
不敢假设 {% load staticfiles %} 将在 django 3 发布后被删除:)
我不确定有什么区别,看起来它们都在工作。我在谷歌上搜索了一下,似乎它们几乎是同一回事。 出于好奇,人们在现场使用哪一个?
我读了那个,但仍然不知道什么时候使用哪个,以及该领域的人使用哪个。我的作品适用于他们两个。起初我以为它正在加载静态文件夹,但它也适用于静态文件... –
目前(Django 1.9 及更早版本),{% load staticfiles %}
从 contrib 应用程序加载 static
模板标签,该应用程序比内置 django.core.static
.[=31] 具有更多功能=]
最重要的区别是 staticfiles
可以管理存储在 CDN 上的文件,因为它的解析器可以管理哈希等。 core.static
仅将 STATIC_URL
附加到静态文件名,如果您正在处理文件(例如添加 md5 哈希以清除版本之间的缓存),这还不够
这种差异是因为管理非本地存储文件并没有专门包含在 Django 的核心包中,但作为官方贡献包实现对许多开发人员来说仍然有用。所以如果你开始使用 staticfiles
,你必须记住在你的模板中使用它。但是,可能会出现一些问题,例如当 using Media
classes 时,所以决定将这两个模板标签合并为一个并使用不同的行为,无论开发人员是否在其 INSTALLED_APPS
中包含 django.contrib.staticfiles
.
从 Django 1.10 and onwards (also see ticket in Django tracker),{% load static %}
将在内部使用 staticfiles
如果激活 (否则保持默认行为),并且contrib 包中的 templatetag 将被弃用以避免混淆。
TL;DR
- 在 Django 1.10 之前:
staticfiles
加载一个可以管理非本地存储的模板标签,而static
不能(或不容易); - 从 Django 1.10:
contrib.staticfiles
应用程序仍然存在,但其模板标签将被删除,只有{% static %}
模板标签保留; - 从 Django 2.0(我相信):
{% load staticfiles %}
已删除。
在 Django 1.10 之前,如果您使用相关的 contrib 应用程序(并且您知道为什么要使用它),请使用 staticfiles
templatetags,否则只需使用 static
.
'django/contrib/staticfiles/templatetags/staticfiles.py' 中关于这个主题的一段有趣的代码:
import warnings
from django import template
from django.templatetags.static import (
do_static as _do_static, static as _static,
)
from django.utils.deprecation import RemovedInDjango30Warning
register = template.Library()
def static(path):
warnings.warn(
'django.contrib.staticfiles.templatetags.static() is deprecated in '
'favor of django.templatetags.static.static().',
RemovedInDjango30Warning,
stacklevel=2,
)
return _static(path)
@register.tag('static')
def do_static(parser, token):
warnings.warn(
'{% load staticfiles %} is deprecated in favor of {% load static %}.',
RemovedInDjango30Warning,
)
return _do_static(parser, token)
不敢假设 {% load staticfiles %} 将在 django 3 发布后被删除:)