我不确定它们之间的区别,似乎两者都能正常工作。我在谷歌搜索了一下,看起来它们基本上是一样的东西。
只是出于好奇,人们在这个领域使用哪一个?
我读了那篇文章,但仍然不知道何时使用哪个版本以及这个领域中人们使用哪个版本。我的代码对它们都能够起作用。起初我以为它只加载静态文件夹,但它也能处理静态文件…
我读了那篇文章,但仍然不知道何时使用哪个版本以及这个领域中人们使用哪个版本。我的代码对它们都能够起作用。起初我以为它只加载静态文件夹,但它也能处理静态文件…
目前(Django 1.9及更早版本),{% load staticfiles %}
会从contrib应用程序中加载static
模板标签,该标签比内置的django.core.static
功能更强大。
最重要的区别是staticfiles
可以管理存储在CDN上的文件,因为它的解析器可以管理哈希值。 core.static
只会将STATIC_URL
附加到静态文件名中,这对于处理文件(例如添加md5哈希以清除发布之间的缓存)不足够。
staticfiles
,则必须记住在模板中每次使用它。但是,可能会出现一些问题,例如当使用Media
类时,因此决定将这两个templatetags合并为一个,并根据开发人员是否在其INSTALLED_APPS
中具有django.contrib.staticfiles
来使用不同的行为。
从Django 1.10及更高版本(还请参阅Django跟踪器中的票证)开始,{% load static %}
将在内部如果激活(否则保持默认行为)使用staticfiles
,并且contrib包中的templatetag将被弃用以避免混淆。
TL;DR
staticfiles
加载一个 templatetags,可以管理非本地存储,其中 static
无法(或不易)管理;contrib.staticfiles
应用程序仍然存在,但其 templatetags 将被删除,只剩下 {% static %}
templatetags;{% load staticfiles %}
被删除。目前,如果您使用相关的 contrib 应用程序(并且知道为什么要使用它),请使用 staticfiles
templatetags 直到 Django 1.10,否则只需使用 static
。
{% load static %}
。 - Uri这个主题中有一个有趣的代码片段位于'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 发布后将被删除 :)