我不确定有什么区别,似乎他们两个都在工作。我用谷歌搜索了一下,似乎它们几乎是一回事。只是出于好奇,人们在该领域使用哪一个?
我读到了,但仍然不知道什么时候使用哪个,以及该领域的哪个人使用。我的对他们俩都有效。起初我以为它正在加载静态文件夹,但它也适用于静态文件...... -</p>
我不确定有什么区别,似乎他们两个都在工作。我用谷歌搜索了一下,似乎它们几乎是一回事。只是出于好奇,人们在该领域使用哪一个?
我读到了,但仍然不知道什么时候使用哪个,以及该领域的哪个人使用。我的对他们俩都有效。起初我以为它正在加载静态文件夹,但它也适用于静态文件...... -</p>
目前(Django 1.9 和更早版本),从 contrib 应用程序{% load staticfiles %}
加载static
模板标签,该应用程序具有比内置django.core.static
.
最重要的区别是staticfiles
可以管理存储在 CDN 上的文件,因为它的解析器可以管理例如哈希。core.static
仅附加STATIC_URL
到静态文件名,如果您正在处理文件,这还不够(例如,添加 md5 哈希以清除版本之间的缓存)
这种差异是由于管理非本地存储文件并没有专门包含在 Django 的核心包中,但对于许多开发人员来说仍然有用,可以作为官方的 contrib 包来实现。所以如果你开始使用staticfiles
,你必须记住在你的模板中使用它。但是,可能会出现一些问题,例如在使用Media
类时,因此决定将这两个模板标签合并为一个,并使用不同的行为,无论开发人员是否django.contrib.staticfiles
在其中INSTALLED_APPS
。
从Django 1.10 及更高版本(另见 Django tracker 中的票证),如果激活{% load static %}
(否则保持默认行为)将在staticfiles
内部使用,并且 contrib 包中的模板标签将被弃用以避免混淆。
TL;博士
staticfiles
的非本地存储;static
contrib.staticfiles
应用程序仍然存在,但它的模板标签将被删除,只剩下{% static %}
模板标签;{% load staticfiles %}
被删除。现在,staticfiles
如果您在 Django 1.10 之前使用相关的 contrib 应用程序(并且您知道为什么使用它),请使用 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 发布后被删除:)