我不确定区别是什么,似乎两者都有效。我用Google搜索,似乎它们几乎是一样的。 只是出于好奇,人们在现场使用哪一个?
我读过但仍然不知道何时使用哪个,以及该领域的哪个人使用。我的工作都适合他们。起初我以为它正在加载静态文件夹,但它也适用于静态文件... -
答案 0 :(得分:23)
目前(Django 1.9及更早版本),{% load staticfiles %}
从contrib应用中加载static
模板标签,该应用具有比内置django.core.static
更多的功能。
最重要的区别是staticfiles
可以管理存储在CDN上的文件,因为它的解析器可以管理哈希值。 core.static
仅将STATIC_URL
附加到静态文件名,如果您正在处理文件,这还不够(例如,添加md5哈希以清除版本之间的缓存)
这种差异是由于管理非本地存储文件并不专门包含在Django的核心软件包中,但对许多开发人员来说仍然有用,可以作为官方的contrib包实现。因此,如果您开始使用staticfiles
,则必须记住在模板中使用它。但是,可能会出现一些问题,例如在using Media
classes时,所以决定将这两个模板标记合并为一个,并使用不同的行为,无论开发人员是否在其django.contrib.staticfiles
中有INSTALLED_APPS
从Django 1.10 and onwards(也是see ticket in Django tracker)开始,{% load static %}
将在内部使用staticfiles
,如果已激活(oherwise保持默认行为),并且不推荐使用contrib包中的templatetag以避免混淆。
<强> TL; DR 强>
staticfiles
加载一个模板标签,可以管理static
无法(或不容易)的非本地存储; contrib.staticfiles
应用仍然存在但其模板标签只会被移除{% static %}
模板标签; {% load staticfiles %}
已删除。现在,如果您使用相关的contrib应用程序(并且知道为什么使用它),请使用staticfiles
templatetags,直到Django 1.10,否则只使用static
。
答案 1 :(得分:2)
关于此主题的'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)
在django 3发行后,我不敢假设{%load staticfiles%}将被删除:)